OpenGL Es 2.0 GLKit Рисование пикселей

Мне нужна небольшая помощь с рисованием пикселей на экране. Код, который я написал, отлично работает на симуляторе, но когда я развертываю его на устройстве, он выводит мусор. Итак, вот мой код:

У меня есть настройка 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, он отображает какой-то мусор. Я новичок, поэтому мне нужна помощь в отображении простых пикселей.


person Asymptote    schedule 06.04.2012    source источник


Ответы (1)


Я считаю, что проблема здесь в том, что вам нужно установить встроенную переменную gl_PointSize в вершинном шейдере, так как значения по умолчанию в симуляторе и на устройстве разные.

Ответ на этот вопрос объясняет дальше.

person Nick    schedule 07.02.2013
comment
Это кажется правильным объяснением, однако, если вы используете GLKBaseEffect, у вас не будет доступа к вершинному шейдеру. GLKit отлично подходит для простой настройки отображения и избегания буферов, но я бы серьезно рекомендовал не использовать GLKBaseEffect и вместо этого предложить вам написать свои собственные шейдеры. - person Ricardo RendonCepeda; 07.02.2013
comment
Таким образом, вы можете использовать пользовательские шейдеры в GLKView, если вы избегаете GLKBaseEffect? У меня возникли проблемы с тем, чтобы заставить это работать, но, вероятно, это просто проблема с моим кодом - я учусь на ходу. - person Nick; 07.02.2013
comment
Да, и я определенно рекомендую его! Истинные энтузиасты OpenGL ES предпочитают иметь полный контроль над своими представлениями и буферами, но я люблю GLKView, потому что он делает конечный код более компактным и менее запутанным — следовательно, фокус смещается на то, что действительно важно: шейдеры. Учитесь по мере продвижения — так называется игра с мобильной графикой. - person Ricardo RendonCepeda; 07.02.2013
comment
Оказалось, что я не добавил шейдеры в скопированные ресурсы пакета, поэтому они не компилировались... ох! Хорошо работает сейчас. - person Nick; 09.02.2013