mirror of
https://git.huckle.dev/Huckles-Minecraft-Archive/4jcraft.git
synced 2026-05-31 11:45:58 +00:00
refactor: configure classic panorama at compile-time
This commit is contained in:
@@ -164,204 +164,203 @@ void TitleScreen::buttonClicked(Button* button) {
|
||||
// method
|
||||
void TitleScreen::renderPanorama(float a) {
|
||||
#ifdef ENABLE_JAVA_GUIS
|
||||
|
||||
Tesselator* t = Tesselator::getInstance();
|
||||
if (minecraft->options->classicPanorama) {
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
gluPerspective(120.0f, 1.0f, 0.05f, 10.0f);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
|
||||
glEnable(GL_BLEND);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glDisable(GL_CULL_FACE);
|
||||
glDepthMask(false);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
char offsetPasses = 8;
|
||||
#ifdef CLASSIC_PANORAMA
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
gluPerspective(120.0f, 1.0f, 0.05f, 10.0f);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glColor4f(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
glRotatef(180.0f, 1.0f, 0.0f, 0.0f);
|
||||
glEnable(GL_BLEND);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glDisable(GL_CULL_FACE);
|
||||
glDepthMask(false);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
char offsetPasses = 8;
|
||||
|
||||
for (int i = 0; i < (offsetPasses * offsetPasses); i++) {
|
||||
for (int i = 0; i < (offsetPasses * offsetPasses); i++) {
|
||||
glPushMatrix();
|
||||
float x =
|
||||
((float)(i % offsetPasses) / (float)offsetPasses - 0.5f) / 64.0f;
|
||||
float y =
|
||||
((float)(i / offsetPasses) / (float)offsetPasses - 0.5f) / 64.0f;
|
||||
float z = 0.0f;
|
||||
glTranslatef(x, y, z);
|
||||
glRotatef(sin((vo + a) / 400.0f) * 25.0f + 20.0f, 1.0f, 0.0f, 0.0f);
|
||||
glRotatef(-(vo + a) * 0.1f, 0.0f, 1.0f, 0.0f);
|
||||
|
||||
for (int j = 0; j < 6; j++) {
|
||||
glPushMatrix();
|
||||
float x = ((float)(i % offsetPasses) / (float)offsetPasses - 0.5f) /
|
||||
64.0f;
|
||||
float y = ((float)(i / offsetPasses) / (float)offsetPasses - 0.5f) /
|
||||
64.0f;
|
||||
float z = 0.0f;
|
||||
glTranslatef(x, y, z);
|
||||
glRotatef(sin((vo + a) / 400.0f) * 25.0f + 20.0f, 1.0f, 0.0f, 0.0f);
|
||||
glRotatef(-(vo + a) * 0.1f, 0.0f, 1.0f, 0.0f);
|
||||
|
||||
for (int j = 0; j < 6; j++) {
|
||||
glPushMatrix();
|
||||
|
||||
switch (j) {
|
||||
case 1:
|
||||
glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
|
||||
break;
|
||||
case 2:
|
||||
glRotatef(180.0f, 0.0f, 1.0f, 0.0f);
|
||||
break;
|
||||
case 3:
|
||||
glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
|
||||
break;
|
||||
case 4:
|
||||
glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
case 5:
|
||||
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, minecraft->textures->loadTexture(
|
||||
TN_TITLE_BG_PANORAMA0 + j));
|
||||
t->begin();
|
||||
t->color(16777215, 255 / (i + 1));
|
||||
t->vertexUV(-1.0f, -1.0f, 1.0f, 0.0f, 0.0f);
|
||||
t->vertexUV(1.0f, -1.0f, 1.0f, 1.0f, 0.0f);
|
||||
t->vertexUV(1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
|
||||
t->vertexUV(-1.0f, 1.0f, 1.0f, 0.0f, 1.0f);
|
||||
t->end();
|
||||
glPopMatrix();
|
||||
switch (j) {
|
||||
case 1:
|
||||
glRotatef(90.0f, 0.0f, 1.0f, 0.0f);
|
||||
break;
|
||||
case 2:
|
||||
glRotatef(180.0f, 0.0f, 1.0f, 0.0f);
|
||||
break;
|
||||
case 3:
|
||||
glRotatef(-90.0f, 0.0f, 1.0f, 0.0f);
|
||||
break;
|
||||
case 4:
|
||||
glRotatef(90.0f, 1.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
case 5:
|
||||
glRotatef(-90.0f, 1.0f, 0.0f, 0.0f);
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D, minecraft->textures->loadTexture(
|
||||
TN_TITLE_BG_PANORAMA0 + j));
|
||||
t->begin();
|
||||
t->color(16777215, 255 / (i + 1));
|
||||
t->vertexUV(-1.0f, -1.0f, 1.0f, 0.0f, 0.0f);
|
||||
t->vertexUV(1.0f, -1.0f, 1.0f, 1.0f, 0.0f);
|
||||
t->vertexUV(1.0f, 1.0f, 1.0f, 1.0f, 1.0f);
|
||||
t->vertexUV(-1.0f, 1.0f, 1.0f, 0.0f, 1.0f);
|
||||
t->end();
|
||||
glPopMatrix();
|
||||
glColorMask(true, true, true, false);
|
||||
}
|
||||
|
||||
t->offset(0.0f, 0.0f, 0.0f);
|
||||
glColorMask(true, true, true, true);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPopMatrix();
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPopMatrix();
|
||||
glDepthMask(true);
|
||||
glEnable(GL_CULL_FACE);
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
} else {
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glOrtho(0, width, height, 0, 1000, 3000);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glTranslatef(0, 0, -2000);
|
||||
|
||||
glDisable(GL_LIGHTING);
|
||||
glDisable(GL_FOG);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthMask(false);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D,
|
||||
minecraft->textures->loadTexture(TN_TITLE_BG_PANORAMA));
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
float off = vo * 0.0004f;
|
||||
|
||||
float screenAspect = (float)width / (float)height;
|
||||
float texAspect = 1748.0f / 144.0f;
|
||||
float scale;
|
||||
if (screenAspect > texAspect) {
|
||||
scale = (float)width / 1748.0f;
|
||||
} else {
|
||||
scale = (float)height / 144.0f;
|
||||
}
|
||||
|
||||
float texWidth = 1748.0f * scale;
|
||||
float texHeight = 144.0f * scale;
|
||||
float yOff = (height - texHeight) / 2.0f;
|
||||
|
||||
float uMax = off + (texWidth / 1748.0f);
|
||||
|
||||
t->begin(GL_QUADS);
|
||||
t->color(0xffffff, 255);
|
||||
t->vertexUV(0, yOff + texHeight, 0, off, 1.0f);
|
||||
t->vertexUV(texWidth, yOff + texHeight, 0, uMax, 1.0f);
|
||||
t->vertexUV(texWidth, yOff, 0, uMax, 0.0f);
|
||||
t->vertexUV(0, yOff, 0, off, 0.0f);
|
||||
t->end();
|
||||
|
||||
glDepthMask(true);
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPopMatrix();
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPopMatrix();
|
||||
glColorMask(true, true, true, false);
|
||||
}
|
||||
|
||||
t->offset(0.0f, 0.0f, 0.0f);
|
||||
glColorMask(true, true, true, true);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPopMatrix();
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPopMatrix();
|
||||
glDepthMask(true);
|
||||
glEnable(GL_CULL_FACE);
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
glEnable(GL_DEPTH_TEST);
|
||||
#else
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glOrtho(0, width, height, 0, 1000, 3000);
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPushMatrix();
|
||||
glLoadIdentity();
|
||||
glTranslatef(0, 0, -2000);
|
||||
|
||||
glDisable(GL_LIGHTING);
|
||||
glDisable(GL_FOG);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
glDisable(GL_ALPHA_TEST);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthMask(false);
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D,
|
||||
minecraft->textures->loadTexture(TN_TITLE_BG_PANORAMA));
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_REPEAT);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
float off = vo * 0.0004f;
|
||||
|
||||
float screenAspect = (float)width / (float)height;
|
||||
float texAspect = 1748.0f / 144.0f;
|
||||
float scale;
|
||||
if (screenAspect > texAspect) {
|
||||
scale = (float)width / 1748.0f;
|
||||
} else {
|
||||
scale = (float)height / 144.0f;
|
||||
}
|
||||
|
||||
float texWidth = 1748.0f * scale;
|
||||
float texHeight = 144.0f * scale;
|
||||
float yOff = (height - texHeight) / 2.0f;
|
||||
|
||||
float uMax = off + (texWidth / 1748.0f);
|
||||
|
||||
t->begin(GL_QUADS);
|
||||
t->color(0xffffff, 255);
|
||||
t->vertexUV(0, yOff + texHeight, 0, off, 1.0f);
|
||||
t->vertexUV(texWidth, yOff + texHeight, 0, uMax, 1.0f);
|
||||
t->vertexUV(texWidth, yOff, 0, uMax, 0.0f);
|
||||
t->vertexUV(0, yOff, 0, off, 0.0f);
|
||||
t->end();
|
||||
|
||||
glDepthMask(true);
|
||||
glDisable(GL_BLEND);
|
||||
glEnable(GL_ALPHA_TEST);
|
||||
glMatrixMode(GL_PROJECTION);
|
||||
glPopMatrix();
|
||||
glMatrixMode(GL_MODELVIEW);
|
||||
glPopMatrix();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
// 4jcraft
|
||||
void TitleScreen::renderSkybox(float a) {
|
||||
#ifdef ENABLE_JAVA_GUIS
|
||||
if (minecraft->options->classicPanorama) {
|
||||
glViewport(0, 0, 256, 256);
|
||||
}
|
||||
#ifdef CLASSIC_PANORAMA
|
||||
glViewport(0, 0, 256, 256);
|
||||
#endif
|
||||
renderPanorama(a);
|
||||
if (minecraft->options->classicPanorama) {
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
#ifdef CLASSIC_PANORAMA
|
||||
glDisable(GL_TEXTURE_2D);
|
||||
glEnable(GL_TEXTURE_2D);
|
||||
|
||||
for (int i = 0; i < 8; i++) {
|
||||
rotateAndBlur(a);
|
||||
}
|
||||
|
||||
glViewport(0, 0, minecraft->width, minecraft->height);
|
||||
|
||||
Tesselator* t = Tesselator::getInstance();
|
||||
t->begin();
|
||||
float aspect =
|
||||
width > height ? 120.0f / (float)width : 120.0f / (float)height;
|
||||
float sWidth = (float)height * aspect / 256.0f;
|
||||
float sHeight = (float)width * aspect / 256.0f;
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
t->color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
t->vertexUV(0.0f, height, 0.0f, (0.5f - sWidth), (0.5f + sHeight));
|
||||
t->vertexUV(width, height, 0.0f, (0.5f - sWidth), (0.5f - sHeight));
|
||||
t->vertexUV(width, 0.0f, 0.0f, (0.5f + sWidth), (0.5f - sHeight));
|
||||
t->vertexUV(0.0f, 0.0f, 0.0f, (0.5f + sWidth), (0.5f + sHeight));
|
||||
t->end();
|
||||
for (int i = 0; i < 8; i++) {
|
||||
rotateAndBlur(a);
|
||||
}
|
||||
|
||||
glViewport(0, 0, minecraft->width, minecraft->height);
|
||||
|
||||
Tesselator* t = Tesselator::getInstance();
|
||||
t->begin();
|
||||
float aspect =
|
||||
width > height ? 120.0f / (float)width : 120.0f / (float)height;
|
||||
float sWidth = (float)height * aspect / 256.0f;
|
||||
float sHeight = (float)width * aspect / 256.0f;
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
t->color(1.0f, 1.0f, 1.0f, 1.0f);
|
||||
t->vertexUV(0.0f, height, 0.0f, (0.5f - sWidth), (0.5f + sHeight));
|
||||
t->vertexUV(width, height, 0.0f, (0.5f - sWidth), (0.5f - sHeight));
|
||||
t->vertexUV(width, 0.0f, 0.0f, (0.5f + sWidth), (0.5f - sHeight));
|
||||
t->vertexUV(0.0f, 0.0f, 0.0f, (0.5f + sWidth), (0.5f + sHeight));
|
||||
t->end();
|
||||
#endif
|
||||
#endif
|
||||
}
|
||||
|
||||
// 4jcraft
|
||||
void TitleScreen::rotateAndBlur(float a) {
|
||||
#ifdef ENABLE_JAVA_GUIS
|
||||
if (minecraft->options->classicPanorama) {
|
||||
glBindTexture(GL_TEXTURE_2D, viewportTexture);
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 256, 256);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glColorMask(true, true, true, false);
|
||||
Tesselator* t = Tesselator::getInstance();
|
||||
t->begin();
|
||||
char blurPasses = 3;
|
||||
#if defined(ENABLE_JAVA_GUIS) && defined(CLASSIC_PANORAMA)
|
||||
glBindTexture(GL_TEXTURE_2D, viewportTexture);
|
||||
glCopyTexSubImage2D(GL_TEXTURE_2D, 0, 0, 0, 0, 0, 256, 256);
|
||||
glEnable(GL_BLEND);
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glColorMask(true, true, true, false);
|
||||
Tesselator* t = Tesselator::getInstance();
|
||||
t->begin();
|
||||
char blurPasses = 3;
|
||||
|
||||
for (int i = 0; i < blurPasses; i++) {
|
||||
t->color(1.0f, 1.0f, 1.0f, 1.0f / (float)(i + 1));
|
||||
float offset = (float)(i - blurPasses / 2) / 256.0f;
|
||||
t->vertexUV(width, height, 0.0f, (0.0f + offset), 0.0f);
|
||||
t->vertexUV(width, 0.0f, 0.0f, (1.0f + offset), 0.0f);
|
||||
t->vertexUV(0.0f, 0.0f, 0.0f, (1.0f + offset), 1.0f);
|
||||
t->vertexUV(0.0f, height, 0.0f, (0.0f + offset), 1.0f);
|
||||
}
|
||||
|
||||
t->end();
|
||||
glColorMask(true, true, true, true);
|
||||
for (int i = 0; i < blurPasses; i++) {
|
||||
t->color(1.0f, 1.0f, 1.0f, 1.0f / (float)(i + 1));
|
||||
float offset = (float)(i - blurPasses / 2) / 256.0f;
|
||||
t->vertexUV(width, height, 0.0f, (0.0f + offset), 0.0f);
|
||||
t->vertexUV(width, 0.0f, 0.0f, (1.0f + offset), 0.0f);
|
||||
t->vertexUV(0.0f, 0.0f, 0.0f, (1.0f + offset), 1.0f);
|
||||
t->vertexUV(0.0f, height, 0.0f, (0.0f + offset), 1.0f);
|
||||
}
|
||||
|
||||
t->end();
|
||||
glColorMask(true, true, true, true);
|
||||
#endif
|
||||
}
|
||||
|
||||
@@ -377,10 +376,10 @@ void TitleScreen::render(int xm, int ym, float a) {
|
||||
int logoY = 30;
|
||||
|
||||
// 4jcraft: gradient for classic panorama
|
||||
if (minecraft->options->classicPanorama) {
|
||||
fillGradient(0, 0, width, height, -2130706433, 16777215);
|
||||
fillGradient(0, 0, width, height, 0, INT_MIN);
|
||||
}
|
||||
#ifdef CLASSIC_PANORAMA
|
||||
fillGradient(0, 0, width, height, -2130706433, 16777215);
|
||||
fillGradient(0, 0, width, height, 0, INT_MIN);
|
||||
#endif
|
||||
|
||||
glBindTexture(GL_TEXTURE_2D,
|
||||
minecraft->textures->loadTexture(TN_TITLE_MCLOGO));
|
||||
|
||||
Reference in New Issue
Block a user