Gå til innhold

(Løst)Problemer med OpenGL 2.0 shader


Anbefalte innlegg

Jeg driver å lager en enkel 3D motor.

Siden jeg syns det så litt flatt ut bestemte jeg meg for å prøve å lage støtte for shader.

Alt kompilerte og det gikk fint helt til punktet:

 

	GLuint vertexShader = glCreateShader(GL_VERTEX_SHADER);

 

Da fikk jeg meldinga :

 

Unhandled exception at 0x00000000 in ZGL.exe: 0xC0000005: Access violation reading location 0x00000000.

 

I starten har jeg definert:

 

#include <gl\glew.h>
#include <gl\gl.h>  
#include <gl\glu.h>	
#include <gl\glaux.h>

#pragma comment(lib,"glew32.lib")

 

Noen som vet hva feilen kan være?

Endret av Keet
Lenke til kommentar
Videoannonse
Annonse

glCreateShader er null, grunnen er at du ikke har hentet pekeren med wglGetProcAddress

Alt fra og med OpenGL 1.2 er extensions, og må først sjekkes om systemet støtter det (glGetString(GL_EXTENSIONS))

og deretter wglGetProcAddress() (husker ikke hva denne extensionen heter, GL_EXT_SHADER eller noe slikt)

Lenke til kommentar
  glCreateShader er null, grunnen er at du ikke har hentet pekeren med wglGetProcAddress

Alt fra og med OpenGL 1.2 er extensions, og må først sjekkes om systemet støtter det (glGetString(GL_EXTENSIONS))

og deretter wglGetProcAddress() (husker ikke hva denne extensionen heter, GL_EXT_SHADER eller noe slikt)

 

Takker. Da skal jeg prøve det.

 

 

Bare av interesse: Har du kommet langt på 3D motoren?

8678190[/snapback]

 

Har ikke kommet så veldig lang enda, men har fått lagt in støtte for diverse teksturformater, en viss støtte for lys, import av mine egene modeller lagd i notepad(har ikke funnet noen god kode for import av 3DS), en enkel Partikkelgenerator og et loggsystem som er under konstruksjon. Det eneste som mangler for å få til et enkelt spill eller lignende er kollisjons testing.

Lenke til kommentar

Jeg har gjort noen forandringer og bruker nå wglGetProcAddress til å definere funksjonene. Nå får jeg definert shader variablene, men får en lignende feilmelding som jeg fikk tidligere når jeg forsøker å kalle opp glShaderSource.

Koden min ser nå slik ut:

 

void LoadShaders(char* Filename1,char* Filename2)
{

PFNGLCREATESHADERPROC CreateShader = NULL;
CreateShader = (PFNGLCREATESHADERPROC) wglGetProcAddress("glCreateShader");
GLuint vertexShader = CreateShader(GL_VERTEX_SHADER);
GLuint fragmentShader = CreateShader(GL_FRAGMENT_SHADER);

char *source1 = readShaderFile(Filename1);
char *source2 = readShaderFile(Filename2);

PFNGLSHADERSOURCEPROC ShaderSource = NULL;
ShaderSource = (PFNGLSHADERSOURCEPROC) wglGetProcAddress("glShaderSource");
ShaderSource(vertexShader, 1, (const char **) source1 , NULL); //kræsjer her
ShaderSource(vertexShader, 1, (const char **) source2 , NULL);

PFNGLCOMPILESHADERPROC CompileShader = NULL;
CompileShader = (PFNGLCOMPILESHADERPROC) wglGetProcAddress("glCompileShader");
CompileShader(vertexShader);
CompileShader(fragmentShader);

PFNGLCREATEPROGRAMPROC CreateProgram = NULL;
CreateProgram = (PFNGLCREATEPROGRAMPROC) wglGetProcAddress("glCreateProgram");
GLuint Program = CreateProgram();

PFNGLATTACHSHADERPROC AttachShader = NULL;
AttachShader = (PFNGLATTACHSHADERPROC)glGetProcAddress("glAttachShader");
AttachShader(Program, vertexShader);
AttachShader(Program, fragmentShader);

free(source1);
free(source2);

}

Endret av Keet
Lenke til kommentar
Bare av interesse: Har du kommet langt på 3D motoren?

8678190[/snapback]

 

Har ikke kommet så veldig lang enda, men har fått lagt in støtte for diverse teksturformater, en viss støtte for lys, import av mine egene modeller lagd i notepad(har ikke funnet noen god kode for import av 3DS), en enkel Partikkelgenerator og et loggsystem som er under konstruksjon. Det eneste som mangler for å få til et enkelt spill eller lignende er kollisjons testing.

8680005[/snapback]

 

når det gjelder 3ds: har du sett på

3DS File Loader men det er bare lasting av mesh og tekstur hvis jeg husker rett.

Ellers så kan du se på Frustum.org ned på siden finner du Viewer for 3ds, mdc, md3 files.

Lenke til kommentar

www.wotsit.org er en glimrende kilde til filformater, selv har jeg implementert både LWO og 3DS flere ganger med kilde derifra.

 

forresten, så regner jeg med at du bruker GL_ARB_SHADER_OBJECTS, og da må du skrive:

glEnable(GL_ARB_SHADER_OBJECTS);

hvis jeg ikke husker feil da, stund siden jeg holdt på med extensions nå....

Lenke til kommentar

Har vært litt opptatt så jeg har ikke fått gjort så mye i det siste. Men nå får jeg lasta inn shadere og jeg får et synlig resultat. Det ser ikke så bra ut enda, men det er en del å sette opp først. som Uniform Variabler og lignende.

 

Uansett, takk for tipsene GeirGrusom. :D

De hjalp veldig siden jeg ikke fant noen gode Tutorials på nettet.

Lenke til kommentar

Man trenger heller ikke overdrive med shaders, man kan få et serdeles veldig bra resultat med bra lyssetting og teksturer.

Ofte synes jeg mange bruker altfor simple meshes, og alt for små teksturer, pluss at mange ikke engang bruker normals og får til skikkelig shading. jeg synes det er veldig viktig at skygger blir helt svarte, eller i det minetse veldig mørke, og bruk flere svake lys, framfor et sterkt et.

Lys og skygge har alt å si for bildekvalitet.

 

edit:

Jeg vil legge til at jeg brukte veldig lang tid på å skjønne hvordan normaler fungerer i OpenGL, fordi tutorialene ikke egentlig forklarte godt nok hva det var i OpenGL:

Normals er et punkt, relativt i forhold til vertexen, som jeg synes var litt misvisende, siden jeg tenkte på normals som en retning (og da hadde det strengt tatt kun vært nødvendig med X og Y)

Så en normal som peker rett opp (hvor Y er vertikalaksen) er { 0, 1, 0 }

Håper det sparer noen for timesvis med frustrasjon, for det hadde hjulpet meg veldig når jeg drev med det :S

Endret av GeirGrusom
Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...