Dreamcast: Implement moving clouds

This commit is contained in:
UnknownShadow200 2023-08-22 19:28:53 +10:00
parent 8217c46634
commit 38dfc3ae32

View File

@ -333,8 +333,9 @@ void Gfx_SetFogMode(FogFunc func) {
/*########################################################################################################################* /*########################################################################################################################*
*---------------------------------------------------------Matrices--------------------------------------------------------* *---------------------------------------------------------Matrices--------------------------------------------------------*
*#########################################################################################################################*/ *#########################################################################################################################*/
static GLenum matrix_modes[] = { GL_PROJECTION, GL_MODELVIEW, GL_TEXTURE }; static GLenum matrix_modes[] = { GL_PROJECTION, GL_MODELVIEW };
static int lastMatrix; static int lastMatrix, textureOffset;
float textureOffsetX, textureOffsetY;
void Gfx_LoadMatrix(MatrixType type, const struct Matrix* matrix) { void Gfx_LoadMatrix(MatrixType type, const struct Matrix* matrix) {
if (type != lastMatrix) { lastMatrix = type; glMatrixMode(matrix_modes[type]); } if (type != lastMatrix) { lastMatrix = type; glMatrixMode(matrix_modes[type]); }
@ -346,13 +347,32 @@ void Gfx_LoadIdentityMatrix(MatrixType type) {
glLoadIdentity(); glLoadIdentity();
} }
static struct Matrix texMatrix = Matrix_IdentityValue;
void Gfx_EnableTextureOffset(float x, float y) { void Gfx_EnableTextureOffset(float x, float y) {
texMatrix.row4.X = x; texMatrix.row4.Y = y; textureOffset = true;
Gfx_LoadMatrix(2, &texMatrix); textureOffsetX = x;
textureOffsetY = y;
} }
void Gfx_DisableTextureOffset(void) { Gfx_LoadIdentityMatrix(2); } void Gfx_DisableTextureOffset(void) {
textureOffset = false;
}
static CC_NOINLINE void ShiftTextureCoords(int count) {
for (int i = 0; i < count; i++)
{
struct VertexTextured* v = (struct VertexTextured*)gfx_vertices + i;
v->U += textureOffsetX;
v->V += textureOffsetY;
}
}
static CC_NOINLINE void UnshiftTextureCoords(int count) {
for (int i = 0; i < count; i++)
{
struct VertexTextured* v = (struct VertexTextured*)gfx_vertices + i;
v->U -= textureOffsetX;
v->V -= textureOffsetY;
}
}
/*########################################################################################################################* /*########################################################################################################################*
@ -420,7 +440,10 @@ void Gfx_DrawVb_IndexedTris_Range(int verticesCount, int startVertex) {
void Gfx_DrawVb_IndexedTris(int verticesCount) { void Gfx_DrawVb_IndexedTris(int verticesCount) {
SetupVertices(0); SetupVertices(0);
if (textureOffset) ShiftTextureCoords(verticesCount);
glDrawElements(GL_TRIANGLES, ICOUNT(verticesCount), GL_UNSIGNED_SHORT, gfx_indices); glDrawElements(GL_TRIANGLES, ICOUNT(verticesCount), GL_UNSIGNED_SHORT, gfx_indices);
if (textureOffset) UnshiftTextureCoords(verticesCount);
} }
void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) { void Gfx_DrawIndexedTris_T2fC4b(int verticesCount, int startVertex) {