1

頂点バッファ オブジェクトからいくつかのデータをレンダリングしようとしています。ただし、 glutil と raw をほとんど使用していません。プログラムを実行すると、無限ループに陥り、下に表示されているエラーが発生します。

頂点シェーダー

#version 150 core

in vec4 position;

void main (void)
{
    gl_Position = position;

}

フラグメントシェーダー

#version 150 core

out vec4 color;

void main (void)
{
    color = vec4(0.0, 0.8, 1.0, 1.0);
}

430 を使用してみましたが、うまくいきませんでした。ということで、150を使っている人が多かったので使ってみました。さらに、生を使用しながらレイアウトを使用しようとしましたが、うまくいきませんでした。

使用例

mesh :: [GLfloat]
mesh = [ 0.25, -0.25, 0.5
       ,-0.25, -0.25, 0.5
       , 0.25,  0.25, 0.5]

preMainLoop :: G.Window -> IO ()
preMainLoop window = do
    p <- loadShaderProgram [ ( VertexShader,   "frag.fs")
                           , ( FragmentShader, "vert.vs")]
    myVBO <- makeBuffer ArrayBuffer mesh
    vao <- makeVAO $ let vad = VertexArrayDescriptor 3 Float stride offset0"
                     in do
                         printErrorMsg "something else"
                         currentProgram $= Just (program p)
                         printErrorMsg "program"
                         bindBuffer ArrayBuffer $= Just myVBO
                         printErrorMsg "buffer"
                         enableAttrib p "position"
                         printErrorMsg "attribLocation"
                         setAttrib p "position" ToFloat vad
                         bindBuffer ArrayBuffer $= Nothing
    mainLoop window vao p

エラー

program
WARNING: attrib position is not active
  GL: Error InvalidOperation "invalid operation"
4

1 に答える 1

1

そこで、opengl raw で自分のコードをテストしてみました。これにより、目的の結果が得られました。

loc <- withCString "position" $ \pos -> glGetAttribLocation p pos
bindBuffer ArrayBuffer $= Just buffer
glEnableVertexAttribArray (fromIntegral loc)
glVertexAttribPointer (fromIntegral loc) 3 gl_FLOAT (fromIntegral gl_FALSE) 8 nl
于 2014-06-01T10:31:18.723 に答える