I’ve also started having an issue with my shaders, tried to condense some code to functions so that it would be less error prone, instead I ended up with errors, I also changed some code in the shaders themselves but I REALLY doubt that that’s it.
Output:
make run
INCS=-I/usr/include/freetype2 -I/usr/include/libpng16 -I/usr/include/harfbuzz -I/usr/include/glib-2.0 -I/usr/lib/glib-2.0/include
LIBS=-lfreetype -l glfw -l GL -l GLEW
CFLAGS=-g
cc INCS CFLAGS -o main.c.o -c main.c LIBS
make: Circular GNUmakefile.o <- GNUmakefile dependency dropped.
cc INCS CFLAGS main.c.o angle.c.o LIBS
./a.out
[OPENGL SHADER ERROR] 8192 bytes:
res/builder.glsl:0:
Code:
#version 330 core
in vec3 v3InPoint;
void main()
{
gl_Position = vec4(v3InPoint, 1.0);
}
make: *** [GNUmakefile:26: run] Error 1
Compilation failed.
The code that loads it into the GFX card:
void debug_shader( GFX_CRAFTER *program, GFX_CRAFTER *crafter )
{
char *log;
unsigned int size = program->size;
glGetShaderiv( crafter->id, GL_INFO_LOG_LENGTH, &size );
size = (size >= program->size) ? size + 1 : program->size;
size += (BUFSIZ - (size % BUFSIZ));
log = realloc( program->code, size );
if ( !log )
{
log = program->code;
size = program->size;
}
program->code = log;
program->size = size;
memset( log, 0, size );
glGetShaderInfoLog( crafter->id, size, NULL, log );
fprintf
(
stderr
, "[OPENGL SHADER ERROR] %u bytes:\n%s:%u:\n%s\nCode:\n%s\n"
, size
, crafter->path
, crafter->line
, log
, crafter->code
);
}
int init_crafters( GFX_CRAFTER *program, GFX_BUFFER *crafters )
{
GFX_CRAFTER *_crafters = crafters->data;
load_crafter( &_crafters[0], "res/builder.glsl", GL_VERTEX_SHADER );
load_crafter( &_crafters[1], "res/painter.glsl", GL_FRAGMENT_SHADER );
for ( int i = 0; i < crafters->used; ++i )
{
GFX_CRAFTER *crafter = _crafters + i;
unsigned int leng;
char const * const code[] = { crafter->code, NULL };
crafter->id = glCreateShader( crafter->type );
glShaderSource( crafter->id, 1, code, NULL );
glGetShaderiv( crafter->id, GL_SHADER_SOURCE_LENGTH, &leng );
if ( leng )
{
glCompileShader( crafter->id );
glGetShaderiv( crafter->id, GL_COMPILE_STATUS, &(crafter->built) );
if( crafter->built )
continue;
}
else
{
fprintf
(
stderr
, "[OPENGL SHADER ERROR]\n%s:%u"
, crafter->path
, crafter->line
);
}
debug_shader( program, crafter );
while ( i )
{
--i;
crafter = crafter + i;
glDeleteShader( crafter->id );
crafter->id = 0;
crafter->built = 0;
}
return -1;
}
return 0;
}
Vertex Shader Code:
#version 330 core
in vec3 v3InPoint;
void main()
{
gl_Position = vec4(v3InPoint, 1.0);
}
Fragment Shader Code:
#version 330 core
layout (location = 0) out vec4 v4OutColour;
uniform vec3 uInColour;
void main()
{
v4OutColour = vec4( uInColour, 1.0 );
}
Edit: Never mind about the shader error, turned out I forgot to fill the crafter->type field at the end of load_crafter(), fixing that resolved the shader errors… for now at least, being a newb to shaders I’m bound to screw up later, especially if I get round to trying out an idea I had this morning of utilising them for compiling many files at once from c to asm then to objects then write it all back to disk, would make rebuilding entire projects many times faster