Мне нужна небольшая помощь при рисовании пикселей на экране. Код, который я написал, отлично работает на симуляторе, но когда я развертываю на устройстве, он выводит мусор. Так вот мой код:OpenGL Es 2.0 GLKit Draw Pixel
Я установки GLKViewController и вот viewDidLoad:
- (void)viewDidLoad
{
[super viewDidLoad];
self.context = [[EAGLContext alloc] initWithAPI:kEAGLRenderingAPIOpenGLES2];
if (!self.context) {
NSLog(@"Failed to create ES context");
}
GLKView *view = (GLKView *)self.view;
view.context = self.context;
view.drawableDepthFormat = GLKViewDrawableDepthFormat24;
[EAGLContext setCurrentContext:self.context];
self.effect = [[GLKBaseEffect alloc] init];
self.effect.useConstantColor = GL_TRUE;
self.effect.constantColor = GLKVector4Make(
0.0, // Red
0.0, // Green
0.0, // Blue
1.0f);// Alpha
GLKMatrix4 projectionMatrix = GLKMatrix4MakeOrtho(0, 480, 0, 320, -1024, 1024);
self.effect.transform.projectionMatrix = projectionMatrix;
}
А вот где я рисую точек/пикселей:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect
{
GLfloat points[] =
{
110.0f, 110.0f,
111.0f, 110.0f,
110.0f, 111.0f,
111.0f, 111.0f,
112.0f, 112.0f,
113.0f, 112.0f,
112.0f, 113.0f,
113.0f, 113.0f,
};
glClearColor(1.0f, 0.0f, 1.0f, 1.0f);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT);
GLKMatrix4 modelViewMatrix = GLKMatrix4MakeTranslation(0.0f, 0.0f, 0.0f);
self.effect.transform.modelviewMatrix = modelViewMatrix;
// Prepare the effect for rendering
[self.effect prepareToDraw];
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 2, GL_FLOAT, GL_FALSE, 2*4, points);
glDrawArrays(GL_POINTS, 0, 8);
}
Когда я бегу на тренажере это работает то есть нарисовать пиксели соответственно, но когда я развертываю на iPod4, он отображает некоторый мусор. Я новичок, поэтому вам нужна помощь в отображении простых пикселей.
Это похоже на правильное объяснение, однако, если вы используете GLKBaseEffect, то у вас не будет доступа к вершинному шейдеру. GLKit отлично подходит для простой настройки дисплея и предотвращения буферов, но я бы серьезно советовал против GLKBaseEffect и вместо этого предложил вам написать свои собственные шейдеры. –
Итак, вы можете использовать пользовательские шейдеры в GLKView, если вы избегаете GLKBaseEffect? У меня возникают проблемы с тем, чтобы это работало, но это, вероятно, просто проблема с моим кодом - я учусь, когда я ухожу. –
Да, и я определенно рекомендую! Истинные энтузиасты OpenGL ES предпочитают иметь полный контроль над своими представлениями и буферами, но я люблю GLKView, потому что он делает конечный код более компактным и менее мазным - отсюда смещение фокуса на то, что действительно важно: шейдеры. «Узнайте, как вы идете» - это название игры с мобильной графикой. –