Jump to content

  • Log In with Google      Sign In   
  • Create Account

Awesome job so far everyone! Please give us your feedback on how our article efforts are going. We still need more finished articles for our May contest theme: Remake the Classics

addiem7c5

Member Since 10 Feb 2011
Offline Last Active Mar 03 2013 01:29 PM
-----

Topics I've Started

Texturing Problem using OpenTK/OpenGL 3.3

26 February 2013 - 03:54 PM

I am having troubles getting texturing working in my OpenTK/OpenGL 3.3 code. I am sure it is something simple that I am missing, but I just can't seem to get a texture on the square I am rendering. (I'm writing a rendering framework for a game).

The relevant code pieces are:

//setup Texcoord array.
GL.BindBuffer(BufferTarget.ArrayBuffer, VertexBufferObject[2]);
GL.BufferData<float>(BufferTarget.ArrayBuffer, (IntPtr)(sizeof(float) * texcoord_information.Count), texcoord_information.ToArray(), BufferUsageHint.StaticDraw);
GL.EnableVertexAttribArray(2);
GL.VertexAttribPointer(2, 2, VertexAttribPointerType.Float, false, 0, 0);
GL.BindBuffer(BufferTarget.ArrayBuffer, 0);
//Set up our textures
for(int i = 0; i < Textures.Count; i++)
{
    Console.WriteLine("Preparing texture.");
    Uniform_To_Texture[GL.GetUniformLocation(Shader.GetProgram(), "diffuse")] = Textures[i];
}
//Render

int texture_unit = 0;
foreach (KeyValuePair<int, ITexture> kvp in Uniform_To_Texture)
{
    GL.Uniform1(kvp.Key, texture_unit);
    GL.ActiveTexture(TextureUnit.Texture0 + texture_unit);
    GL.BindTexture(TextureTarget.Texture2D, kvp.Value.GetTextureHandle());
    texture_unit++;
}
if (!GL.IsVertexArray(VertexArrayObject))
    throw new OpenGLException("Vertex Array Object not set up correctly, cannot render!");
GL.BindVertexArray(VertexArrayObject);
GL.DrawArrays(BeginMode.Triangles, 0, Vertices.Count);
GL.BindVertexArray(0);

 

Then the vertex and fragment shaders are:

//Vertex shader
#version 330
uniform mat4 viewmatrix, projmatrix, transformmatrix;

in vec3 position;
in vec3 normal;
in vec2 texcoord;

varying vec2 texturecoord;

void main()
{
    texturecoord = texcoord;
    gl_Position = projmatrix * viewmatrix * transformmatrix * vec4(position, 1.0) ;
}

//Fragment Shader
#version 330
uniform sampler2D diffuse;
varying vec2 texturecoord;

out vec4 color;
void main(void)
{
    color = texture2D(diffuse, texturecoord);
}

 

The square I am rendering is just coming up white, if that helps any. 


PARTNERS