Моя цель - нарисовать текстуры и нарисовать цветную линию сверху в GlKViewController. Обе части работают индивидуально, но когда я совмещаю их в одну и ту же функцию рисования, я теряю текстуры - они окрашены в тот же цвет, что и линия.Конфликт между рисованием как текстур, так и линий с цветами в GLKit
В моем розыгрыше
ме-Во-первых, код для моих текстурированных треугольников:
- (void)glkView:(GLKView *)view drawInRect:(CGRect)rect {
[EAGLContext setCurrentContext:self.context];
[self.effect prepareToDraw];
self.effect.texture2d0.enabled = YES;
glClearColor(0.5, 0.5, 0.5, 1.0);
glClear(GL_COLOR_BUFFER_BIT);
glEnable(GL_BLEND);
glBindBuffer(GL_ARRAY_BUFFER, _vertexBuffer);
glBindBuffer(GL_ELEMENT_ARRAY_BUFFER, _indexBuffer);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition, 3, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, Position));
glEnableVertexAttribArray(GLKVertexAttribTexCoord0);
glVertexAttribPointer(GLKVertexAttribTexCoord0, 2, GL_FLOAT, GL_FALSE, sizeof(Vertex), (const GLvoid *) offsetof(Vertex, TexCoord));
glDrawElements(GL_TRIANGLES, nLiveSquares*6, GL_UNSIGNED_SHORT, 0);
Далее следуют код для моих строк:
self.effect.texture2d0.enabled = NO;
glDisable(GL_BLEND);
glBindBuffer(GL_ARRAY_BUFFER, _lineBuffer);
glEnableVertexAttribArray(GLKVertexAttribPosition);
glVertexAttribPointer(GLKVertexAttribPosition,2,GL_FLOAT,GL_FALSE,sizeof(LinePoint),(const GLvoid *) offsetof(LinePoint, Position));
glEnableVertexAttribArray(GLKVertexAttribColor);
glVertexAttribPointer(GLKVertexAttribColor,4,GL_FLOAT,GL_FALSE,sizeof(LinePoint),(const GLvoid *) offsetof(LinePoint, Color));
// Set the line width
glLineWidth(50.0);
// Render the line
glDrawArrays(GL_LINE_STRIP, 0, 2);
Проблема, кажется, возникают используя GLKVertexAttribColor. Как только я применил атрибут цвета к строкам, все текстуры также окрашены в тот же цвет, что и линии.
Edit: Часть этой проблемы может быть решена с помощью
glDisableVertexAttribArray(GLKVertexAttribColor);
после glDrawArrays на последней строке выше.
Мои текстуры больше не имеют цвета того же цвета, что и линия, но теперь они отображаются как белые прямоугольники, что на самом деле не является улучшением.
Кроме того, если я прокомментирую «self.effect.texture2d0.enabled = YES» и «self.effect.texture2d0.enabled = NO», тогда мои текстуры будут правильно отображаться, но моя строка станет черной (когда она должна быть зеленого цвета).
Редактирование II: Я думаю, что я действительно ищу, это способ отключить текстуры для одного блока (линии рисования), а затем снова включить их для рисования треугольников. И я думаю, что не так, что self.effect.texture2d0.enabled устанавливает состояние для всего, что нарисовано.