/*==========================================================
  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(202420242024);
}

void SB_generateSkyBox(float widthfloat heightfloat length)
{
  float pxpypz;

  px = -width  / 2;
  py = -height / 2;
  pz = -length / 2;

  if(!(g_sbList = glGenLists(1)))
  {
    CON_printf("SkyBox:  Failed to generate list");
    return;
  }

  glNewList(g_sbListGL_COMPILE);

  glEnable(GL_TEXTURE_2D);

  glBindTexture(GL_TEXTURE_2Dg_sbTexture[1]);
  glBegin(GL_QUADS);
    glTexCoord2f(00);  glVertex3f(px,         py,          pz);
    glTexCoord2f(01);  glVertex3f(px,         py + heightpz);
    glTexCoord2f(11);  glVertex3f(px + widthpy + heightpz);
    glTexCoord2f(10);  glVertex3f(px + widthpypz);
  glEnd();

  glBindTexture(GL_TEXTURE_2Dg_sbTexture[3]);
  glBegin(GL_QUADS);
    glTexCoord2f(10);  glVertex3f(px,         py,          pz + length);
    glTexCoord2f(11);  glVertex3f(px,         py + heightpz + length);
    glTexCoord2f(01);  glVertex3f(px + widthpy + heightpz + length);
    glTexCoord2f(00);  glVertex3f(px + widthpy,          pz + length);
  glEnd();

  glBindTexture(GL_TEXTURE_2Dg_sbTexture[5]);
  glBegin(GL_QUADS);
    glTexCoord2f(11);  glVertex3f(px + widthpypz);
    glTexCoord2f(10);  glVertex3f(px + widthpypz + length);
    glTexCoord2f(00);  glVertex3f(px,         pypz + length);
    glTexCoord2f(01);  glVertex3f(px,         pypz);
  glEnd();

  glBindTexture(GL_TEXTURE_2Dg_sbTexture[4]);
  glBegin(GL_QUADS);
    glTexCoord2f(00);  glVertex3f(px,         py + heightpz);
    glTexCoord2f(01);  glVertex3f(px,         py + heightpz + length);
    glTexCoord2f(11);  glVertex3f(px + widthpy + heightpz + length);
    glTexCoord2f(10);  glVertex3f(px + widthpy + heightpz);
  glEnd();

  glBindTexture(GL_TEXTURE_2Dg_sbTexture[0]);
  glBegin(GL_QUADS);
    glTexCoord2f(10);  glVertex3f(pxpy,          pz);
    glTexCoord2f(00);  glVertex3f(pxpy,          pz + length);
    glTexCoord2f(01);  glVertex3f(pxpy + heightpz + length);
    glTexCoord2f(11);  glVertex3f(pxpy + heightpz);
  glEnd();

  glBindTexture(GL_TEXTURE_2Dg_sbTexture[2]);
  glBegin(GL_QUADS);
    glTexCoord2f(00);  glVertex3f(px + widthpy,          pz);
    glTexCoord2f(10);  glVertex3f(px + widthpy,          pz + length);
    glTexCoord2f(11);  glVertex3f(px + widthpy + heightpz + length);
    glTexCoord2f(01);  glVertex3f(px + widthpy + heightpz);
  glEnd();

  glEndList();
}