digitalmars.D - Sharing your openGL Shader struct
- bioinfornatics (99/99) Apr 20 2012 I start to move to openGL3, i share mmine first struct for use Shader
- Felix Hufnagel (3/3) Apr 20 2012 Dav1d has one : https://bitbucket.org/dav1d/glamour/overview
- bioinfornatics (3/7) Apr 20 2012 Derp sound good i found only one probblem impossible to build with given
I start to move to openGL3, i share mmine first struct for use Shader with openGL3. Enhance or share your struct. ------------------------------------ struct Shader{ private: void initializeTypeShader( GLuint* shader, GLenum type, string source ){ if( glCreateShader is null ) throw new Exception("Shader unsported by ypur graphic card" ); switch(type){ case GL_VERTEX_SHADER: *shader =3D glCreateShader(type); break; case GL_FRAGMENT_SHADER: *shader =3D glCreateShader(type); break; default: glDeleteShader(*shader); throw new Exception("Error unkonwn shader type ( %d )".format( type ) ); } char[] sourceCode; File f =3D File( source, "r" ); f.rawRead( sourceCode ); f.close(); char* sourceCodePtr =3D sourceCode.ptr; GLint compilError, sizeError; glShaderSource(*shader, 1, &sourceCodePtr, null); glCompileShader(*shader); glGetShaderiv(*shader, GL_COMPILE_STATUS, &compilError); if( compilError !=3D GL_TRUE ){ glGetShaderiv(*shader, GL_INFO_LOG_LENGTH, &sizeError); char[] error =3D new char[]( sizeError ); glGetShaderInfoLog(*shader, sizeError, &sizeError, error.ptr); throw new Exception("Error shader compilation failled ( %d )".format( type ) ); } } void bindAttribLocation(){ glBindAttribLocation( _programID, 0, "in_Vertex" ); glBindAttribLocation( _programID, 1, "in_Color" ); glBindAttribLocation( _programID, 2, "in_TexCoord0" ); glBindAttribLocation( _programID, 3, "in_Normal" ); } string _vertex; string _fragment; GLuint _vertexID; GLuint _fragmentID; GLuint _programID; bool _isInitialized; public: this( string vertex, string fragment){ _vertexID =3D 0; _fragmentID =3D 0; _programID =3D 0; _isInitialized =3D false; } ~this(){ glDeleteShader( _vertexID ); glDeleteShader( _fragmentID ); glDeleteProgram( _programID ); } property void initialize(){ initializeTypeShader( &_vertexID, GL_VERTEX_SHADER, _vertex ); initializeTypeShader( &_fragmentID, GL_FRAGMENT_SHADER, _fragment ); _programID =3D glCreateProgram(); glAttachShader( _programID, _vertexID ); glAttachShader( _programID, _fragmentID ); bindAttribLocation(); glLinkProgram( _programID ); GLint link =3D 0; glGetProgramiv( _programID, GL_LINK_STATUS, &link ); if( link !=3D GL_TRUE ){ GLint errorSize =3D 0; char[] error =3D null; glGetProgramiv( _programID, GL_INFO_LOG_LENGTH, &errorSize); error =3D new char[]( errorSize ); glGetProgramInfoLog( _programID, errorSize, &errorSize, error.ptr); throw new Exception( "OpenGL program link error: %s", to!string( error ) ); } _isInitialized =3D true; } property programID(){ return _programID; } property Shader dup(){ Shader duplicate =3D Shader( _vertex, _fragment); duplicate.initialize(); return duplicate; } }
Apr 20 2012
Dav1d has one : https://bitbucket.org/dav1d/glamour/overview what we have in Derp: https://github.com/svenstaro/derp/blob/master/derp/graphics/shader.d
Apr 20 2012
Le vendredi 20 avril 2012 =C3=A0 22:03 +0200, Felix Hufnagel a =C3=A9crit :Dav1d has one : https://bitbucket.org/dav1d/glamour/overview =20 what we have in Derp: =20 https://github.com/svenstaro/derp/blob/master/derp/graphics/shader.dDerp sound good i found only one probblem impossible to build with given makefile with another compiler as ldc2 or gdc
Apr 20 2012