Jump to content

  • Log In with Google      Sign In   
  • Create Account

Calling all IT Pros from Canada and Australia.. we need your help! Support our site by taking a quick sponsored surveyand win a chance at a $50 Amazon gift card. Click here to get started!

Basic shader doesn't want to color the quad

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.

  • You cannot reply to this topic
1 reply to this topic

#1 RobeeZ   Members   -  Reputation: 206


Posted 24 November 2012 - 04:12 AM


I'm started to learn LWJGL and OpenGL, and following a tutorial, my code doesn't want to color the quad.


[source lang="java"]public class Game{ //VARIABLES private int vaoID = 0; private int vboID = 0; private int vboiID = 0; //for indices private int vbocID = 0; //for colors private int indicesCount = 0; private int vsID = 0; private int fsID = 0; private int pID = 0; public Game() { try { Display.setDisplayMode(new DisplayMode(1280,720)); Display.create(); } catch(LWJGLException e) { e.printStackTrace(); } } private void start() { init(); doMainLoop(); cleanUp(); } private void init() { //initialization GL11.glClearColor(0.4f, 0.6f, 0.9f, 0f); GL11.glViewport(0, 0, 1280, 720); //Default is counter-clockwise!!! //It's not important when using Elements! float[] vertices = { -0.5f,0.5f,0f,1f, -0.5f,-0.5f,0f,1f, 0.5f,-0.5f,0f,1f, 0.5f,0.5f,0f,1f }; //OGL Buffers requires flipped byte buffers FloatBuffer verticesBuffer = BufferUtils.createFloatBuffer(vertices.length); verticesBuffer.put(vertices); verticesBuffer.flip(); float[] colors = { 1f,0f,0f,1f, 0f,1f,0f,1f, 0f,0f,1f,1f, 1f,1f,1f,1f }; FloatBuffer colorBuffer = BufferUtils.createFloatBuffer(colors.length); colorBuffer.put(colors); colorBuffer.flip(); byte[] indices = { //Left bottom 0, 1, 2, //Right top 2, 3, 0 }; indicesCount = indices.length; ByteBuffer indicesBuffer = BufferUtils.createByteBuffer(indicesCount); indicesBuffer.put(indices); indicesBuffer.flip(); //Create new VAO, and bind the data // A VAO can have up to 16 attributes (VBO's) assigned to it by default vaoID = GL30.glGenVertexArrays(); GL30.glBindVertexArray(vaoID); //Create new VBO, and bind // A VBO is a collection of Vectors which in this case resemble the location of each vertex. vboID = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vboID); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, verticesBuffer, GL15.GL_STATIC_DRAW); //Put the VBO in the attrib list at index 0 GL20.glVertexAttribPointer(0, 4 ,GL11.GL_FLOAT, false, 0, 0); //Deselect (bind to 0) the VBO GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); //Create new VBO for colors vbocID = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, vbocID); GL15.glBufferData(GL15.GL_ARRAY_BUFFER, colorBuffer, GL15.GL_STATIC_DRAW); GL20.glVertexAttribPointer(1, 4, GL11.GL_FLOAT, false, 0, 0); GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); //Deselect (bind to 0) the VAO GL30.glBindVertexArray(0); //Create new VBO for indices, and bind it vboiID = GL15.glGenBuffers(); GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboiID); GL15.glBufferData(GL15.GL_ELEMENT_ARRAY_BUFFER, indicesBuffer, GL15.GL_STATIC_DRAW); //Deselect it GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); //Load shaders vsID = loadShader("src/net/doubler/hexdef/basic.vs", GL20.GL_VERTEX_SHADER); fsID = loadShader("src/net/doubler/hexdef/basic.fs", GL20.GL_FRAGMENT_SHADER); //Create program, and apply shaders pID = GL20.glCreateProgram(); GL20.glAttachShader(pID, vsID); GL20.glAttachShader(pID, fsID); GL20.glLinkProgram(pID); //Position info will be attrib 0 GL20.glBindAttribLocation(pID, 0, "in_Position"); //Color info will be attrib 1 GL20.glBindAttribLocation(pID, 1, "in_Color"); //Validate program GL20.glValidateProgram(pID); } private void doMainLoop() { while(!Display.isCloseRequested()) { GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); GL20.glUseProgram(pID); //Bind to the VAO that has all the info about the quad vertices GL30.glBindVertexArray(vaoID); GL20.glEnableVertexAttribArray(0); GL20.glEnableVertexAttribArray(1); //Bind to the index VBO that has the info about the order GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, vboiID); //Draw the vertices GL11.glDrawElements(GL11.GL_TRIANGLES, indicesCount, GL11.GL_UNSIGNED_BYTE, 0); //Put everything back to default GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); GL20.glDisableVertexAttribArray(0); GL20.glDisableVertexAttribArray(1); GL30.glBindVertexArray(0); GL20.glUseProgram(0); Display.sync(60); Display.update(); } } private void cleanUp() { //clean up every trash //Delete shaders GL20.glUseProgram(0); GL20.glDetachShader(pID, vsID); GL20.glDetachShader(pID, fsID); GL20.glDeleteShader(vsID); GL20.glDeleteShader(fsID); GL20.glDeleteProgram(pID); //Select VAO GL30.glBindVertexArray(vaoID); //Disable the VBO index from the VAO attrib list GL20.glDisableVertexAttribArray(0); GL20.glDisableVertexAttribArray(1); //Delete the vertex VBO GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); GL15.glDeleteBuffers(vboID); //Delete the index VBO GL15.glBindBuffer(GL15.GL_ELEMENT_ARRAY_BUFFER, 0); GL15.glDeleteBuffers(vboiID); //Delete the color VBO GL15.glBindBuffer(GL15.GL_ARRAY_BUFFER, 0); GL15.glDeleteBuffers(vbocID); //Delete the VAO GL30.glBindVertexArray(0); GL30.glDeleteVertexArrays(vaoID); Display.destroy(); } public int loadShader(String name, int type) { StringBuilder source = new StringBuilder(); int shaderID = 0; try { BufferedReader reader = new BufferedReader(new FileReader(name)); String line; while((line = reader.readLine()) != null) { source.append(line).append("\n"); } reader.close(); } catch(IOException e) { e.printStackTrace(); System.exit(-1); } shaderID = GL20.glCreateShader(type); GL20.glShaderSource(shaderID, source); GL20.glCompileShader(shaderID); return shaderID; } public static void main(String[] args) { Game app = new Game(); app.start(); }}[/source]


[source lang="cpp"]#version 330in vec4 in_Position;in vec4 in_Color;out vec4 pass_Color;void main(void){ gl_Position = in_Position; pass_Color = in_Color;}[/source]

[source lang="cpp"]#version 330in vec4 pass_Color;out vec4 out_Color;void main(void){ out_Color = pass_Color;}[/source]

The only output I get is a white quad. It looks like the shaders are not compiling or I don't know. I tried to change out_Color to gl_FragColor, still white quad. Thanks in advance

Edited by RobeeZ, 24 November 2012 - 06:53 AM.


#2 RobeeZ   Members   -  Reputation: 206


Posted 24 November 2012 - 08:21 AM

So awkward. I mistype a letter in the shader. I wrote gl_position instead of gl_Position

Old topic!
Guest, the last post of this topic is over 60 days old and at this point you may not reply in this topic. If you wish to continue this conversation start a new topic.