2012-05-11 25 views
1

OpenGL ES 2.0 GLKitで線を描こうとしています。OpenGL ES 2.0 GLKit線を描く

「実在しないプログラムの使用」 glDrawArrays(GL_LINE_STRIP、0,4)

「GLエラー:無効な操作」私は次のコードを実行およびOpenGL ESアナライザを使用する場合、私は、次のエラーを取得 GL_INVALID_OPERATION < - glVertexPointer(2、GL_FLOAT、0、NULL) GL_INVALID_OPERATION < - glEnableClientState(GL_VERTEX_ARRAY)

はここに私のコードです:

#import "GLDrawingView.h" 


const float data[] = {0.0f, 1.0f, 0.0f, 0.0f, 1.0f, -0.0f, 0.0f, 1.0f}; 



@interface GLDrawingView() { 
    GLuint lineVBO; 
} 

@end 

@implementation GLDrawingView 

- (id)initWithFrame:(CGRect)frame 
{ 
    self = [super initWithFrame:frame]; 
    if (self) { 
     [EAGLContext setCurrentContext:self.context];   
     glGenBuffers(1, &lineVBO); 
     glBindBuffer(GL_ARRAY_BUFFER, lineVBO); 
     glBufferData(GL_ARRAY_BUFFER, sizeof(data), data, GL_STATIC_DRAW); 
    } 
    return self; 
} 

- (void)drawRect:(CGRect)rect 
{ 
    glVertexPointer(2, GL_FLOAT, 0, NULL); 
    glEnableClientState(GL_VERTEX_ARRAY); 
    glDrawArrays(GL_LINE_STRIP, 0, sizeof(data)/sizeof(float)/2); 
} 

@end 

答えて

5

OpenGL ES 2.0で何かを描画するときは、レンダリングにシェーダプログラム(glUseProgram)を使用する必要があります。 GLES2ではシェーダなしでレンダリングすることはできません。

+0

これは確かですか?私はシェーダを使用しないGLKitアプリケーションを持っています - もしそうであれば、それらは内蔵されています。私は確かにコード化もコンパイルもしていませんでした!それはうまくレンダリングされます。 – Olie

+0

glkitには、ES 1.0の機能を模倣したシェイダーが組み込まれています。基本的にそのエフェクトクラスは何ですか。 glkitはopengl 2.0のラッパーです – Fonix