@@ -135,15 +135,15 @@ void UniformParameters::pushf(const char* name, GLfloat x, GLfloat y, GLfloat z,
135135void UniformParameters::pushSampler1D (const char * name, GLuint* textureID, GLint textureBindID)
136136{
137137 UniformData* data = new UniformData (name, uniformSAMPLER1D);
138- data->uniformValue [0 ].valueuPtr = textureID;
138+ data->uniformValue [0 ].valuePtr = textureID;
139139 data->uniformValue [1 ].valuei = textureBindID;
140140 m_vecUniforms.push_back (data);
141141}
142142
143143void UniformParameters::pushSampler2D (const char * name, GLuint* textureID, GLint textureBindID)
144144{
145145 UniformData* data = new UniformData (name, uniformSAMPLER2D);
146- data->uniformValue [0 ].valueuPtr = textureID;
146+ data->uniformValue [0 ].valuePtr = textureID;
147147 data->uniformValue [1 ].valuei = textureBindID;
148148 m_vecUniforms.push_back (data);
149149}
@@ -217,15 +217,15 @@ void UniformParameters::assignUniforms(CGEImageHandlerInterface* hander, GLuint
217217#ifdef GL_TEXTURE_1D
218218 int texutreBindID = CGE_TEXTURE_START + (*iter)->uniformValue [1 ].valuei ;
219219 glActiveTexture (texutreBindID);
220- glBindTexture (GL_TEXTURE_1D, *(*iter)->uniformValue [0 ].valueuPtr );
220+ glBindTexture (GL_TEXTURE_1D, *(*iter)->uniformValue [0 ].valuePtr );
221221 glUniform1i (uniformID, texutreBindID - GL_TEXTURE0);
222222#endif
223223 }
224224 break ;
225225 case uniformSAMPLER2D: {
226226 int texutreBindID = CGE_TEXTURE_START + (*iter)->uniformValue [1 ].valuei ;
227227 glActiveTexture (texutreBindID);
228- glBindTexture (GL_TEXTURE_2D, *(*iter)->uniformValue [0 ].valueuPtr );
228+ glBindTexture (GL_TEXTURE_2D, *(*iter)->uniformValue [0 ].valuePtr );
229229 glUniform1i (uniformID, texutreBindID - GL_TEXTURE0);
230230 }
231231 break ;
@@ -306,14 +306,19 @@ ProgramObject::~ProgramObject()
306306 glDeleteProgram (m_programID);
307307}
308308
309+ bool ProgramObject::initWithComputeShader (const char * csh)
310+ {
311+ return m_fragOrComputeShader.init (GL_COMPUTE_SHADER) && m_fragOrComputeShader.loadShaderSourceFromString (csh) && linkWithShaderObject (m_fragOrComputeShader, m_fragOrComputeShader, true );
312+ }
313+
309314bool ProgramObject::initFragmentShaderSourceFromString (const char * fragShader)
310315{
311- return m_fragObj .init (GL_FRAGMENT_SHADER) && m_fragObj .loadShaderSourceFromString (fragShader);
316+ return m_fragOrComputeShader .init (GL_FRAGMENT_SHADER) && m_fragOrComputeShader .loadShaderSourceFromString (fragShader);
312317}
313318
314319bool ProgramObject::initVertexShaderSourceFromString (const char * vertShader)
315320{
316- return m_vertObj .init (GL_VERTEX_SHADER) && m_vertObj .loadShaderSourceFromString (vertShader);
321+ return m_vertShader .init (GL_VERTEX_SHADER) && m_vertShader .loadShaderSourceFromString (vertShader);
317322}
318323
319324bool ProgramObject::initWithShaderStrings (const char * vsh, const char * fsh)
@@ -338,17 +343,21 @@ bool ProgramObject::linkWithShaderObject(ShaderObject& vertObj, ShaderObject& fr
338343 {
339344 m_programID = glCreateProgram ();
340345 }
346+
341347 GLint programStatus;
342- glAttachShader (m_programID, vertObj.shaderID ());
348+
349+ if (vertObj.shaderID () != fragObj.shaderID ()) // / equals when using compute shader.
350+ glAttachShader (m_programID, vertObj.shaderID ());
343351 glAttachShader (m_programID, fragObj.shaderID ());
352+
344353 cgeCheckGLError (" Attach Shaders in useProgram" );
345354 glLinkProgram (m_programID);
346355 glGetProgramiv (m_programID, GL_LINK_STATUS, &programStatus);
347356
348357 if (shouldClear)
349358 {
350- m_vertObj .clear ();
351- m_fragObj .clear ();
359+ m_vertShader .clear ();
360+ m_fragOrComputeShader .clear ();
352361 }
353362
354363 if (programStatus != GL_TRUE)
0 commit comments