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








bioinfornatics <bioinfornatics fedoraproject.org>