c++ - Incompatible Types (vec4 and vec3) in assignment -
i've been learning opengl, along "glsl". i'm getting error trying compile fragment shader:
incompatible types (vec4 , vec3) in assignment (and no available implicit conversion)
can please me understand , resolve error? code below:
#version 330 core in vec3 ourcolor; in vec2 texcoord; out vec4 color; // texture samplers uniform sampler2d ourtexture1; void main() { // linearly interpolate between both textures (second texture combined) color = texture(ourtexture1, texcoord); }
thank you.
edit: here shader compiler:
class shaders_shader { public: gluint program; // constructor generates shader on fly shaders_shader( const glchar *vertexpath, const glchar *fragmentpath ) { // 1. retrieve vertex/fragment source code filepath std::string vertexcode; std::string fragmentcode; std::ifstream vshaderfile; std::ifstream fshaderfile; // ensures ifstream objects can throw exceptions: vshaderfile.exceptions ( std::ifstream::badbit ); fshaderfile.exceptions ( std::ifstream::badbit ); try { // open files vshaderfile.open( vertexpath ); fshaderfile.open( fragmentpath ); std::stringstream vshaderstream, fshaderstream; // read file's buffer contents streams vshaderstream << vshaderfile.rdbuf( ); fshaderstream << fshaderfile.rdbuf( ); // close file handlers vshaderfile.close( ); fshaderfile.close( ); // convert stream string vertexcode = vshaderstream.str( ); fragmentcode = fshaderstream.str( ); } catch ( std::ifstream::failure e ) { std::cout << "error::shader::file_not_succesfully_read" << std::endl; } const glchar *vshadercode = vertexcode.c_str( ); const glchar *fshadercode = fragmentcode.c_str( ); // 2. compile shaders gluint vertex, fragment; glint success; glchar infolog[512]; // vertex shader vertex = glcreateshader( gl_vertex_shader ); glshadersource( vertex, 1, &vshadercode, null ); glcompileshader( vertex ); // print compile errors if glgetshaderiv( vertex, gl_compile_status, &success ); if ( !success ) { glgetshaderinfolog( vertex, 512, null, infolog ); std::cout << "error::shader::vertex::compilation_failed\n" << infolog << std::endl; } // fragment shader fragment = glcreateshader( gl_fragment_shader ); glshadersource( fragment, 1, &fshadercode, null ); glcompileshader( fragment ); // print compile errors if glgetshaderiv( fragment, gl_compile_status, &success ); if ( !success ) { glgetshaderinfolog( fragment, 512, null, infolog ); std::cout << "error::shader::fragment::compilation_failed\n" << infolog << std::endl; } // shader program this->program = glcreateprogram( ); glattachshader( this->program, vertex ); glattachshader( this->program, fragment ); gllinkprogram( this->program ); // print linking errors if glgetprogramiv( this->program, gl_link_status, &success ); if (!success) { glgetprograminfolog( this->program, 512, null, infolog ); std::cout << "error::shader::program::linking_failed\n" << infolog << std::endl; } // delete shaders they're linked our program , no longer necessery gldeleteshader( vertex ); gldeleteshader( fragment ); } // uses current shader void use( ) { gluseprogram( this->program ); } };
Comments
Post a Comment