<div dir="ltr"><span style="font-size:12.8px"><font color="#0000ff">>>Is the program linked at this point?  MatrixID should be GLint and you should test that MatrixID != -1.</font></span><br><div><span style="font-size:12.8px"><font color="#0000ff"><br></font></span></div><div><span style="font-size:12.8px"><font color="#000000">Yes. The shader program is able to compile and link. I have changed it to Glint and the MatrixID is valid.</font></span></div><div><span style="font-size:12.8px"><font color="#000000"><br></font></span></div><div><span style="font-size:12.8px"><font color="#0000ff">>>Are you calling glGetError() to check for errors?</font></span><span style="font-size:12.8px"><font color="#000000"><br></font></span></div><div><span style="font-size:12.8px"><font color="#0000ff"><br></font></span></div><div><span style="font-size:12.8px"><font color="#000000">glGetError() is not throwing any errors.</font></span></div><div><br></div><div><span style="font-size:12.8px">glGetProgramInfoLog() and glGetShaderInfoLog() are also checked in the shader.cpp.</span><br></div><div><span style="font-size:12.8px"><br></span></div><div>Thank you so much Brian!!  will look into the type checks and shader validations and update.</div><div><br></div><div><br></div><div>Regards,</div><div>Vikram</div><div><br></div></div><div class="gmail_extra"><br><div class="gmail_quote">On Tue, Mar 8, 2016 at 3:10 AM, Brian Paul <span dir="ltr"><<a href="mailto:brianp@vmware.com" target="_blank">brianp@vmware.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On 03/07/2016 12:13 AM, vikramnrao wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
Hi Brian,<br>
<br>
Currently I am unable to view anything the render using glsl shader.<br>
I have tried rendering a simple triangle in immediate mode and it<br>
renders fine(off-screen).<br>
But not able to clear background color.<br>
<br>
My renderScene code for Immediate mode looks something like this:<br>
<br>
glClear(GL_COLOR_BUFFER_BIT);<br>
glClear(GL_DEPTH_BUFFER_BIT);<br>
glClearColor(0.0f, 0.0f, 0.4f, 0.0f);<br>
</blockquote>
<br></span>
You should set the color before calling glClear().<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">
<br>
// Enable depth test<br>
glEnable(GL_DEPTH_TEST);<br>
// Accept fragment if it closer to the camera than the former one<br>
glDepthFunc(GL_LESS);<br>
<br>
// Cull triangles which normal is not towards the camera<br>
glEnable(GL_CULL_FACE);<br>
<br>
glBegin(GL_TRIANGLES);<br>
glColor3f(0.5f, 0.0f, 0.0f);<br>
glVertex3f(-1.0f, 0.0f, -1.0f);<br>
glColor3f(0.0f, 0.5f, 0.0f);<br>
glVertex3f(1.0f, 0.0f, -1.0f);<br>
glColor3f(0.0f, 0.0f, 0.5f);<br>
glVertex3f(0.0f, 1.0f, 0.0f);<br>
glEnd();<br>
<br>
glFinish();<br>
SaveScreenGrab("mesa_snapshot.tga");<br>
<br>
<br>
But same triangle using shader doesn't render at all. However the<br>
glClearColor clears the screen color correctly.<br>
<br>
<br>
Below is the bit of code that I took from (<a href="http://opengl.org" rel="noreferrer" target="_blank">opengl.org</a><br></span>
<<a href="https://urldefense.proofpoint.com/v2/url?u=http-3A__opengl.org&d=BQMFaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=T0t4QG7chq2ZwJo6wilkFznRSFy-8uDKartPGbomVj8&m=QEdFbrBKV_Dbv7s3zEN_t8kUV5UYxjVym60nXIWrkDI&s=J_tgBAEFHUAblpGuLppBJyqZRh-n_F_7Jlv3_aK-DQo&e=" rel="noreferrer" target="_blank">https://urldefense.proofpoint.com/v2/url?u=http-3A__opengl.org&d=BQMFaQ&c=Sqcl0Ez6M0X8aeM67LKIiDJAXVeAw-YihVMNtXt-uEs&r=T0t4QG7chq2ZwJo6wilkFznRSFy-8uDKartPGbomVj8&m=QEdFbrBKV_Dbv7s3zEN_t8kUV5UYxjVym60nXIWrkDI&s=J_tgBAEFHUAblpGuLppBJyqZRh-n_F_7Jlv3_aK-DQo&e=</a>>)<span class=""><br>
which render the scene into a targa image.<br>
<br>
// Dark blue background<br>
glClearColor(0.0f, 0.0f, 0.4f, 0.0f);<br>
<br>
// Enable depth test<br>
glEnable(GL_DEPTH_TEST);<br>
// Accept fragment if it closer to the camera than the former one<br>
glDepthFunc(GL_LESS);<br>
<br>
// Create and compile our GLSL program from the shaders<br>
GLuint programID = LoadShaders("camera.vertexshader",<br>
"camera.fragmentshader");<br>
<br>
// Get a handle for our "MVP" uniform<br>
GLuint MatrixID = glGetUniformLocation(programID, "MVP");<br>
</span></blockquote>
<br>
Is the program linked at this point?  MatrixID should be GLint and you should test that MatrixID != -1.<span class=""><br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
<br>
// Get a handle for our buffers<br>
GLuint vertexPosition_modelspaceID = glGetAttribLocation(programID,<br>
"vertexPosition_modelspace");<br>
GLuint vertexColorID = glGetAttribLocation(programID, "vertexColor");<br>
</blockquote>
<br></span>
GLint as well, and check for non-negative values.<br>
<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div class="h5">
<br>
// Projection matrix : 45° Field of View, 4:3 ratio, display range : 0.1<br>
unit <-> 100 units<br>
glm::mat4 Projection = glm::perspective(45.0f, 4.0f / 3.0f, 0.1f, 100.0f);<br>
<br>
// Camera matrix<br>
glm::mat4 View = glm::lookAt(<br>
glm::vec3(4, 3, -3), // Camera is at (4,3,-3), in World Space<br>
glm::vec3(0, 0, 0), // and looks at the origin<br>
glm::vec3(0, 1, 0)  // Head is up (set to 0,-1,0 to look upside-down)<br>
);<br>
// Model matrix : an identity matrix (model will be at the origin)<br>
glm::mat4 Model = glm::mat4(1.0f);<br>
// Our ModelViewProjection : multiplication of our 3 matrices<br>
glm::mat4 MVP = Projection * View * Model; // Remember, matrix<br>
multiplication is the other way around<br>
<br>
GLuint vertexbuffer;<br>
glGenBuffers(1, &vertexbuffer);<br>
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);<br>
glBufferData(GL_ARRAY_BUFFER, sizeof(g_vertex_buffer_data),<br>
g_vertex_buffer_data, GL_STATIC_DRAW);<br>
<br>
GLuint colorbuffer;<br>
glGenBuffers(1, &colorbuffer);<br>
glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);<br>
glBufferData(GL_ARRAY_BUFFER, sizeof(g_color_buffer_data),<br>
g_color_buffer_data, GL_STATIC_DRAW);<br>
<br>
// Clear the screen<br>
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);<br>
<br>
// Use our shader<br>
glUseProgram(programID);<br>
<br>
// Send our transformation to the currently bound shader,<br>
// in the "MVP" uniform<br>
glUniformMatrix4fv(MatrixID, 1, GL_FALSE, &MVP[0][0]);<br>
<br>
// 1rst attribute buffer : vertices<br>
glEnableVertexAttribArray(vertexPosition_modelspaceID);<br>
glBindBuffer(GL_ARRAY_BUFFER, vertexbuffer);<br>
glVertexAttribPointer(<br>
vertexPosition_modelspaceID, // The attribute we want to configure<br>
3,                           // size<br>
GL_FLOAT,                    // type<br>
GL_FALSE,                    // normalized?<br>
0,                           // stride<br>
(void*)0                     // array buffer offset<br>
);<br>
<br>
// 2nd attribute buffer : colors<br>
glEnableVertexAttribArray(vertexColorID);<br>
glBindBuffer(GL_ARRAY_BUFFER, colorbuffer);<br>
glVertexAttribPointer(<br>
vertexColorID,               // The attribute we want to configure<br>
3,                           // size<br>
GL_FLOAT,                    // type<br>
GL_FALSE,                    // normalized?<br>
0,                           // stride<br>
(void*)0                     // array buffer offset<br>
);<br>
<br>
// Draw the triangleS !<br>
glDrawArrays(GL_TRIANGLES, 0, 12 * 3); // 12*3 indices starting at 0 -><br>
12 triangles<br>
<br>
<br>
glDisableVertexAttribArray(vertexPosition_modelspaceID);<br>
glDisableVertexAttribArray(vertexColorID);<br>
<br>
SaveScreenGrab("mesa_snapshot.tga");<br>
<br>
// Cleanup VBO and shader<br>
glDeleteBuffers(1, &vertexbuffer);<br>
glDeleteBuffers(1, &colorbuffer);<br>
glDeleteProgram(programID);<br>
<br>
<br>
<br></div></div>
*vertex shader code:*<span class=""><br>
<br>
#version 120<br>
<br>
// Input vertex data, different for all executions of this shader.<br>
attribute vec3 vertexPosition_modelspace;<br>
attribute vec3 vertexColor;<br>
<br>
// Output data ; will be interpolated for each fragment.<br>
varying vec3 fragmentColor;<br>
// Values that stay constant for the whole mesh.<br>
uniform mat4 MVP;<br>
<br>
void main(){<br>
<br>
// Output position of the vertex, in clip space : MVP * position<br>
gl_Position =  MVP * vec4(vertexPosition_modelspace,1);<br>
<br>
// The color of each vertex will be interpolated<br>
// to produce the color of each fragment<br>
fragmentColor = vertexColor;<br>
}<br>
<br></span>
*fragment shader code:*<br>
*<br>
*<span class=""><br>
#version 120<br>
// Interpolated values from the vertex shaders<br>
varying vec3 fragmentColor;<br>
<br>
void main(){<br>
<br>
gl_FragColor = fragmentColor;<br>
<br>
}<br>
<br>
<br>
<br>
Please guide me if I am doing something wrong here.<br>
</span></blockquote>
<br>
Hard to say without running the program and debugging things (which I don't have time to do).  If the window is blank, it could be a transformation matrix mistake.  Maybe you could start with identity matrices for the model, view and projection and see if anything shows up.<br>
<br>
Are you calling glGetError() to check for errors?  Also, glGetProgramInfoLog() and glGetShaderInfoLog() should be checked for shader compiler/linker errors.<span class="HOEnZb"><font color="#888888"><br>
<br>
-Brian<br>
<br>
</font></span></blockquote></div><br></div>