Panorama Skybox fixes;

This commit is contained in:
bjorn 2017-03-12 16:57:27 -07:00
parent 4feeb4d4ab
commit a4257378f0
4 changed files with 31 additions and 17 deletions

View File

@ -147,8 +147,9 @@ void lovrFontPrint(Font* font, const char* str, float x, float y, float z, float
lovrGraphicsRotate(angle, ax, ay, az);
lovrGraphicsTranslate(0, -cy / 2, 0);
lovrGraphicsSetDepthTest(COMPARE_LEQUAL);
lovrGraphicsBindTexture(NULL);
lovrGraphicsSetShapeData(font->vertices.data, font->vertices.length);
lovrGraphicsDrawPrimitive(GL_TRIANGLES, font->texture, 0, 1, 0);
lovrGraphicsDrawPrimitive(GL_TRIANGLES, 0, 1, 0);
lovrGraphicsSetDepthTest(oldCompareMode);
lovrGraphicsPop();
}

View File

@ -453,12 +453,11 @@ void lovrGraphicsSetIndexData(unsigned int* data, int length) {
vec_pusharr(&state.shapeIndices, data, length);
}
void lovrGraphicsDrawPrimitive(GLenum mode, Texture* texture, int hasNormals, int hasTexCoords, int useIndices) {
void lovrGraphicsDrawPrimitive(GLenum mode, int hasNormals, int hasTexCoords, int useIndices) {
int stride = 3 + (hasNormals ? 3 : 0) + (hasTexCoords ? 2 : 0);
int strideBytes = stride * sizeof(float);
lovrGraphicsPrepare();
lovrGraphicsBindTexture(texture);
glBindVertexArray(state.shapeArray);
glBindBuffer(GL_ARRAY_BUFFER, state.shapeBuffer);
glBufferData(GL_ARRAY_BUFFER, state.shapeData.length * sizeof(float), state.shapeData.data, GL_STREAM_DRAW);
@ -492,19 +491,23 @@ void lovrGraphicsDrawPrimitive(GLenum mode, Texture* texture, int hasNormals, in
}
void lovrGraphicsPoints(float* points, int count) {
lovrGraphicsBindTexture(NULL);
lovrGraphicsSetShapeData(points, count);
lovrGraphicsDrawPrimitive(GL_POINTS, NULL, 0, 0, 0);
lovrGraphicsDrawPrimitive(GL_POINTS, 0, 0, 0);
}
void lovrGraphicsLine(float* points, int count) {
lovrGraphicsBindTexture(NULL);
lovrGraphicsSetShapeData(points, count);
lovrGraphicsDrawPrimitive(GL_LINE_STRIP, NULL, 0, 0, 0);
lovrGraphicsDrawPrimitive(GL_LINE_STRIP, 0, 0, 0);
}
void lovrGraphicsTriangle(DrawMode mode, float* points) {
lovrGraphicsBindTexture(NULL);
if (mode == DRAW_MODE_LINE) {
lovrGraphicsSetShapeData(points, 9);
lovrGraphicsDrawPrimitive(GL_LINE_LOOP, NULL, 0, 0, 0);
lovrGraphicsDrawPrimitive(GL_LINE_LOOP, 0, 0, 0);
} else {
float normal[3];
vec3_cross(vec3_init(normal, &points[0]), &points[3]);
@ -516,7 +519,7 @@ void lovrGraphicsTriangle(DrawMode mode, float* points) {
};
lovrGraphicsSetShapeData(data, 18);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, NULL, 1, 0, 0);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, 1, 0, 0);
}
}
@ -553,8 +556,9 @@ void lovrGraphicsPlane(DrawMode mode, Texture* texture, float x, float y, float
-.5, -.5, 0
};
lovrGraphicsBindTexture(NULL);
lovrGraphicsSetShapeData(points, 12);
lovrGraphicsDrawPrimitive(GL_LINE_LOOP, NULL, 0, 0, 0);
lovrGraphicsDrawPrimitive(GL_LINE_LOOP, 0, 0, 0);
} else if (mode == DRAW_MODE_FILL) {
float data[] = {
-.5, .5, 0, 0, 0, -1, 0, 0,
@ -563,8 +567,9 @@ void lovrGraphicsPlane(DrawMode mode, Texture* texture, float x, float y, float
.5, -.5, 0, 0, 0, -1, 1, 1
};
lovrGraphicsBindTexture(texture);
lovrGraphicsSetShapeData(data, 32);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, texture, 1, 1, 0);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, 1, 1, 0);
}
lovrGraphicsPop();
@ -582,8 +587,9 @@ void lovrGraphicsPlaneFullscreen(Texture* texture) {
lovrRetain(&lastShader->ref);
lovrGraphicsSetShader(state.fullscreenShader);
lovrGraphicsBindTexture(texture);
lovrGraphicsSetShapeData(data, 20);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, texture, 0, 1, 0);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, 0, 1, 0);
lovrGraphicsSetShader(lastShader);
lovrRelease(&lastShader->ref);
@ -614,9 +620,10 @@ void lovrGraphicsCube(DrawMode mode, Texture* texture, mat4 transform) {
0, 4, 1, 5, 2, 6, 3, 7 // Connections
};
lovrGraphicsBindTexture(NULL);
lovrGraphicsSetShapeData(points, 24);
lovrGraphicsSetIndexData(indices, 24);
lovrGraphicsDrawPrimitive(GL_LINES, NULL, 0, 0, 1);
lovrGraphicsDrawPrimitive(GL_LINES, 0, 0, 1);
} else {
float data[] = {
// Front
@ -660,8 +667,9 @@ void lovrGraphicsCube(DrawMode mode, Texture* texture, mat4 transform) {
.5, .5, .5, 0, 1, 0, 1, 0
};
lovrGraphicsBindTexture(texture);
lovrGraphicsSetShapeData(data, 208);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, texture, 1, 1, 0);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, 1, 1, 0);
}
lovrGraphicsPop();
@ -728,7 +736,7 @@ void lovrGraphicsSkybox(Skybox* skybox, float angle, float ax, float ay, float a
int wasCulling = lovrGraphicsIsCullingEnabled();
lovrGraphicsSetCullingEnabled(0);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, NULL, 0, 0, 0);
lovrGraphicsDrawPrimitive(GL_TRIANGLE_STRIP, 0, 0, 0);
lovrGraphicsSetCullingEnabled(wasCulling);
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
@ -762,7 +770,7 @@ void lovrGraphicsSkybox(Skybox* skybox, float angle, float ax, float ay, float a
}
}
int indices[9600]; // resolution * resolution * 6
unsigned int indices[9600]; // resolution * resolution * 6
for (int i = 0; i < resolution; i++) {
int offset0 = i * (resolution + 1);
int offset1 = (i + 1) * (resolution + 1);
@ -778,11 +786,16 @@ void lovrGraphicsSkybox(Skybox* skybox, float angle, float ax, float ay, float a
}
}
Texture* oldTexture = lovrGraphicsGetTexture();
glBindTexture(GL_TEXTURE_2D, skybox->texture);
lovrGraphicsSetShapeData(sphere, 8000);
lovrGraphicsSetIndexData(indices, 9600);
glDepthMask(GL_FALSE);
lovrGraphicsDrawPrimitive(GL_TRIANGLES, skybox->texture, 0, 1, 1);
lovrGraphicsDrawPrimitive(GL_TRIANGLES, 0, 1, 1);
glDepthMask(GL_TRUE);
glBindTexture(GL_TEXTURE_2D, oldTexture->id);
}
lovrGraphicsSetShader(lastShader);

View File

@ -154,7 +154,7 @@ void lovrGraphicsMatrixTransform(mat4 transform);
// Primitives
void lovrGraphicsSetShapeData(float* data, int length);
void lovrGraphicsSetIndexData(unsigned int* data, int length);
void lovrGraphicsDrawPrimitive(GLenum mode, Texture* texture, int hasNormals, int hasTexCoords, int useIndices);
void lovrGraphicsDrawPrimitive(GLenum mode, int hasNormals, int hasTexCoords, int useIndices);
void lovrGraphicsPoints(float* points, int count);
void lovrGraphicsLine(float* points, int count);
void lovrGraphicsTriangle(DrawMode mode, float* points);

View File

@ -14,5 +14,5 @@ typedef struct {
GLuint texture;
} Skybox;
Skybox* lovrSkyboxCreate(void** data, size_t* size, int count);
Skybox* lovrSkyboxCreate(void** data, size_t* size, SkyboxType type);
void lovrSkyboxDestroy(const Ref* ref);