У меня есть код, который из поверхности делает текстуру OpenGL: SDL_Color color = { 255, 255, 255, 0 }; SDL_Surface* surfaceText = TTF_RenderText_Solid(ourFont, simple text, color); glGenTextures(1, u0026amp;ret); glBindTexture(GL_TEXTURE_2D, ret); glTexImage2D(GL_TEXTURE_2D, 0, 3, surfaceText-u0026gt;w, surfaceText-u0026gt;h, 0, GL_RGB, GL_UNSIGNED_BYTE, surfaceText-u0026gt;pixels); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_MIRRORED_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_MIRRORED_REPEAT); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST); glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR); glBindTexture(GL_TEXTURE_2D, 0); SDL_FreeSurface(surfaceText); … и есть код, который рисует эту текстуру: tglDisable(GL_DEPTH_TEST); tglDisable(GL_CULL_FACE); tglViewport(0, 0, width, height); tglClearColor(1.f, 1.f, 0.f, 1.f); tglClear(GL_DEPTH_BUFFER_BIT | GL_COLOR_BUFFER_BIT); t//GLint location = glGetUniformLocation(GrapicsPipelineShaderProgram, dx); t//glUniform1f(location, dx); tglUniform1i(glGetUniformLocation(GrapicsPipelineShaderProgram, sampTexture), 0); tGLCheck(glUseProgram(GrapicsPipelineShaderProgram)); tGLCheckErrorProgram(GrapicsPipelineShaderProgram, first); tglBindVertexArray(VertexArrayObject); tglActiveTexture(GL_TEXTURE0); tglBindTexture(GL_TEXTURE_2D, ret); tglDrawElementsInstanced(GL_TRIANGLES, 6, GL_UNSIGNED_INT, 0, 1); tglBindVertexArray(0); tglUseProgram(0); tglBindTexture(GL_TEXTURE_2D, 0); tglDisable(GL_TEXTURE_2D); а также шейдеры Вершинный: #version 410 core layout(location=0) in vec2 position; layout(location=1) in vec2 texCoord; out vec2 texCoordinates; void main() { ttexCoordinates = texCoord; tgl_Position = vec4(position.x + gl_InstanceID / 3, position.y, 0.0f, 1.0f); } И Фрагментный: #version 410 core in vec2 texCoordinates; uniform sampler2D sampTexture; out vec4 color; void main() { tcolor = texture(sampTexture, texCoordinates); } Также я создаю VAO и EAB: GLfloat vertexData[16] = { t0.0f, 0.0f, 0.0f, 0.0f, t0.5f, 0.0f, 1.0f, 0.0f, t0.0f, 0.5f, 0.0f, 1.0f, t0.5f, 0.5f, 1.0f, 1.0f }; GLuint IndexBufferData[6] = {0, 1, 2, 1, 3, 2}; glGenVertexArrays(1, u0026amp;VertexArrayObject); glBindVertexArray(VertexArrayObject); glGenBuffers(1, u0026amp;VertexBufferObject); glBindBuffer(GL_ARRAY_BUFFER, VertexBufferObject); glBufferData(GL_ARRAY_BUFFER, 16 * sizeof(GLfloat), vertexData, GL_STATIC_DRAW); glGenBuffers(1, u0026amp;IndexBufferObject); glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, IndexBufferObject); glBufferData(GL_ELEMENT_ARRAY_BUFFER, 6 * sizeof(GLuint), IndexBufferData, GL_STATIC_DRAW); glEnableVertexAttribArray(0); glVertexAttribPointer(0, 2, GL_FLOAT, false, sizeof(GLfloat) * 4, (GLvoid*)0); glEnableVertexAttribArray(1); glVertexAttribPointer(1, 2, GL_FLOAT, false, sizeof(GLfloat) * 4, (GLvoid*)(sizeof(GLfloat) * 2)); glBindVertexArray(0); glDisableVertexAttribArray(0); glDisableVertexAttribArray(1); На поверхности есть текстНа экране появляется только черный прямоугольник (2 треугольника) без текстуры
Проблема может быть в нескольких местах. Проверь, что текстура корректно загружается, и что ваши координаты текстуры правильно привязаны. Также убедись, что шейдеры не отдают черный цвет. Попробуй отладить вывод, добавляя временные прерывания и проверки.
Проблема может быть в нескольких местах. Проверь, что текстура корректно загружается, и что ваши координаты текстуры правильно привязаны. Также убедись, что шейдеры не отдают черный цвет. Попробуй отладить вывод, добавляя временные прерывания и проверки.
Свернуть