SDL2 с OpenGL ES 2.0 - невозможно нарисовать простой треугольник на iOS

Я использую SDL2 для тестирования OpenGL ES 2.0 и по какой-то причине не могу что-то нарисовать на экране. Я правильно настроил свои шейдеры, и он правильно скомпилирован и связан с атрибутами вершин, но все еще ничего. Треугольник действительно рисует, если я скомпилирую приложение для MacOSX или Windows.

Вот мой шейдер:

[VERTEX SHADER]

attribute vec3 vPosition;

void main() {
    gl_Position = vec4(vPosition.xyz, 1.0);
}

[ФРАГМЕНТНАЯ ШЕЙДЕР]

precision mediump float;

varying vec4 _color;

void main() {
    gl_FragColor = vec4(1.0, 1.0, 1.0, 1.0);
}

Также обратите внимание, что перед связыванием шейдера я называю это:

glBindAttribLocation(programObj, 0, "vPosition");

[ЧЕРТЕЖНЫЙ КОД]

glUseProgram(programObj);

GLfloat vVertices[] = {0.0f, 0.5f, 0.0f,
            -0.5f, -0.5f, 0.0f,
            0.5f, -0.5f, 0.0f};

glViewport(0, 0, 320, 480);
glClear(GL_COLOR_BUFFER_BIT | GL_DEPTH_BUFFER_BIT | GL_STENCIL_BUFFER_BIT);

// Load the vertex data
glVertexAttribPointer(0, 3, GL_FLOAT, GL_FALSE, 0, vVertices);
glEnableVertexAttribArray(0);
glDrawArrays(GL_TRIANGLES, 0, 3);

SDL_GL_SwapWindow(window);

Как я упоминал ранее, это прекрасно работает на MacOSX или Windows, но когда я компилирую его для iOS, ничего не рисует. Кто-нибудь может указать, что я делаю не так?

1 ответ

Это, вероятно, означает, что ваш код инициализации не завершен. Чтобы убедиться, что все инициализировано, вы можете создать SDL рендерер, который инициализирует все необходимое. Вам не нужно использовать его для рисования после создания.

SDL_Renderer *renderer = SDL_CreateRenderer(window, -1, 0);

Если вы находите это решение слишком грязным и хакерским, вы можете изучить исходный код SDL_CreateRenderer и добавить недостающие части в ваш код.

У меня была такая же проблема, когда я портировал игру OpenGL на iOS, создание рендера решило проблему.

Другие вопросы по тегам