/*==========================================================
File: skybox.c
Author: _pragma
Description: Initializes and renders skybox.
==========================================================*/
#include <GL/gl.h>
#include <SDL/SDL.h>
#include "skybox.h"
#include "texture.h"
#include "console.h"
#include "util.h"
GLuint g_sbTexture[6], g_sbList = 0 ;
void SB_initSkyBox(void)
{
if(!(g_sbTexture[0] = T_loadTextureTGA("data/textures/skybox/skyboxA.tga", false)))
CON_printf("skybox: failed to load texture");
if(!(g_sbTexture[1] = T_loadTextureTGA("data/textures/skybox/skyboxB.tga", false)))
CON_printf("skybox: failed to load texture");
if(!(g_sbTexture[2] = T_loadTextureTGA("data/textures/skybox/skyboxC.tga", false)))
CON_printf("skybox: failed to load texture");
if(!(g_sbTexture[3] = T_loadTextureTGA("data/textures/skybox/skyboxD.tga", false)))
CON_printf("skybox: failed to load texture");
if(!(g_sbTexture[4] = T_loadTextureTGA("data/textures/skybox/skyboxE.tga", false)))
CON_printf("skybox: failed to load texture");
if(!(g_sbTexture[5] = T_loadTextureTGA("data/textures/skybox/skyboxF.tga", false)))
CON_printf("skybox: failed to load texture");
SB_generateSkyBox(2024, 2024, 2024);
}
void SB_generateSkyBox(float width, float height, float length)
{
float px, py, pz;
px = -width / 2;
py = -height / 2;
pz = -length / 2;
if(!(g_sbList = glGenLists(1)))
{
CON_printf("SkyBox: Failed to generate list");
return;
}
glNewList(g_sbList, GL_COMPILE);
glEnable(GL_TEXTURE_2D);
glBindTexture(GL_TEXTURE_2D, g_sbTexture[1]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(px, py, pz);
glTexCoord2f(0, 1); glVertex3f(px, py + height, pz);
glTexCoord2f(1, 1); glVertex3f(px + width, py + height, pz);
glTexCoord2f(1, 0); glVertex3f(px + width, py, pz);
glEnd();
glBindTexture(GL_TEXTURE_2D, g_sbTexture[3]);
glBegin(GL_QUADS);
glTexCoord2f(1, 0); glVertex3f(px, py, pz + length);
glTexCoord2f(1, 1); glVertex3f(px, py + height, pz + length);
glTexCoord2f(0, 1); glVertex3f(px + width, py + height, pz + length);
glTexCoord2f(0, 0); glVertex3f(px + width, py, pz + length);
glEnd();
glBindTexture(GL_TEXTURE_2D, g_sbTexture[5]);
glBegin(GL_QUADS);
glTexCoord2f(1, 1); glVertex3f(px + width, py, pz);
glTexCoord2f(1, 0); glVertex3f(px + width, py, pz + length);
glTexCoord2f(0, 0); glVertex3f(px, py, pz + length);
glTexCoord2f(0, 1); glVertex3f(px, py, pz);
glEnd();
glBindTexture(GL_TEXTURE_2D, g_sbTexture[4]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(px, py + height, pz);
glTexCoord2f(0, 1); glVertex3f(px, py + height, pz + length);
glTexCoord2f(1, 1); glVertex3f(px + width, py + height, pz + length);
glTexCoord2f(1, 0); glVertex3f(px + width, py + height, pz);
glEnd();
glBindTexture(GL_TEXTURE_2D, g_sbTexture[0]);
glBegin(GL_QUADS);
glTexCoord2f(1, 0); glVertex3f(px, py, pz);
glTexCoord2f(0, 0); glVertex3f(px, py, pz + length);
glTexCoord2f(0, 1); glVertex3f(px, py + height, pz + length);
glTexCoord2f(1, 1); glVertex3f(px, py + height, pz);
glEnd();
glBindTexture(GL_TEXTURE_2D, g_sbTexture[2]);
glBegin(GL_QUADS);
glTexCoord2f(0, 0); glVertex3f(px + width, py, pz);
glTexCoord2f(1, 0); glVertex3f(px + width, py, pz + length);
glTexCoord2f(1, 1); glVertex3f(px + width, py + height, pz + length);
glTexCoord2f(0, 1); glVertex3f(px + width, py + height, pz);
glEnd();
glEndList();
}