2016-10-11 5 views
0

SharpGLラッパーを使用してランタイムで生成されたテクスチャでテクスチャをテクスチャ処理しようとしています。SharpGL 2D Texturingの問題

三角形がテクスチャ化されていない理由はわかりません。

gl.Error()描画ループには、GL_NO_ERRORを意味する0が返されます。

private void openGLControl_OpenGLDraw(object sender, OpenGLEventArgs args) 
    { 

     OpenGL gl = openGLControl.OpenGL; 
     gl.Clear(OpenGL.GL_COLOR_BUFFER_BIT | OpenGL.GL_DEPTH_BUFFER_BIT); 
     gl.LoadIdentity(); 
     gl.Color(1.0f,1.0f,1.0f,1.0f); 
     gl.Begin(OpenGL.GL_TRIANGLES); 
     gl.TexCoord(0, 1.0f); 
     gl.Vertex(0.0f, 0.0f); 
     gl.TexCoord(1.0f, 0f); 
     gl.Vertex(1.0f, 0f); 
     gl.TexCoord(1.0f, 1.0f); 
     gl.Vertex(1.0f, 1.0f); 
     gl.End(); 

    } 

    private void openGLControl_OpenGLInitialized(object sender, OpenGLEventArgs args) 
    { 

     Random rnd = new Random(); 
     OpenGL gl = openGLControl.OpenGL; 
     gl.ClearColor(0, 0, 0, 0); 

     gl.Enable(OpenGL.GL_TEXTURE_2D); 

     byte[] colors = new byte[256 * 256 * 4]; 

     for (int i = 0; i < 256 * 256 * 4; i++) 
     { 
      colors[i] = (byte)rnd.Next(256); 
     } 

     uint[] textureID = new uint[1]; 
     gl.GenTextures(1, textureID); 
     gl.TexImage2D(OpenGL.GL_TEXTURE_2D, 0, (int)OpenGL.GL_RGBA, 256, 256, 0, OpenGL.GL_RGBA, OpenGL.GL_BYTE, colors); 
     gl.BindTexture(OpenGL.GL_TEXTURE_2D, textureID[0]); 

    } 

答えて

0

あなたはgl.TexImage2Dを呼び出す前gl.BindTextureを呼び出す必要があります。

この理由は、両方の関数の第1引数にあります。 OpenGLには、バインドされているものを追跡するステートマシンがあります。 gl.TexImage2Dを呼び出すと、GLに、現在バインドされているテクスチャにピクセルをアップロードするように指示しています(OpenGL.GL_TEXTURE_2D)。 gl.BindTextureは、生成したテクスチャをOpenGL.GL_TEXTURE_2Dにバインドします。

+0

関与してくれてありがとう、私はTexImageの前にBind textureを呼び出すためにtryiedしました。 –

+0

あなたが投稿したコードはすべて、有効なOpenGLです。シャープGLはコントロール内で自動的にバッファ交換を行うと仮定しています。 テクスチャ全体をテスト用の単色で作ってみましたか? –

+0

はい、私は試しましたが、結果はありません:( –

0

テクスチャが設定欠けていた見えなかった理由:

uint[] array = new uint[] { OpenGL.GL_NEAREST }; 
     gl.TexParameterI(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MIN_FILTER, array); 
     gl.TexParameterI(OpenGL.GL_TEXTURE_2D, OpenGL.GL_TEXTURE_MAG_FILTER, array); 

デフォルトSharpGLことでは生成されませんでしたミップマップを使用しています。