/*********************************************************************//**
*	Graphics definition.
*	V tomto souboru se definuji zakladni vlastnosti grafiky a hlavne
*	rozsireni OpenGL, ktera se zde vyuzivaji.
*
*	author: Michal Jirous
*	date: 09.04.2009
*	file: graphics.cpp
**********************************************************************/

#include "graphics.h"
#include <string>
#include <iostream>
#include "sys_console.h"

using namespace systemConsole;

bool graphics_multiTexturingEnabled = false;
int graphics_textureUnitsCound = 1;

PFNGLMULTITEXCOORD1FARBPROC glMultiTexCoord1fARB = NULL;
PFNGLMULTITEXCOORD2FARBPROC glMultiTexCoord2fARB = NULL;
PFNGLMULTITEXCOORD3FARBPROC glMultiTexCoord3fARB = NULL;
PFNGLMULTITEXCOORD4FARBPROC glMultiTexCoord4fARB = NULL;

PFNGLACTIVETEXTUREARBPROC glActiveTextureARB = NULL;
PFNGLCLIENTACTIVETEXTUREARBPROC glClientActiveTextureARB = NULL;

PFNGLBLENDEQUATIONPROC glBlendEquation = NULL;
bool graphics_Image_subsetEnabled = false;

PFNGLFOGCOORDPOINTERPROC glFogCoordPointer = NULL;
bool graphics_Fog = false;

PFNGLFOGCOORDFPROC glFogCoordf;
void graphics_init()
{
	std::string extensions = (char*)glGetString(GL_EXTENSIONS);
	/*for( size_t i = 0; i < extensions.length(); ++i )
		if( extensions[i] == ' ' )
			extensions[i] = '\n';
	std::cout << extensions << std::endl;*/

	if( extensions.find( "GL_ARB_multitexture" ) )
	{
		console << "Multitexturing supported." << endline;

		glGetIntegerv( GL_MAX_TEXTURE_UNITS_ARB, &graphics_textureUnitsCound);
		
		if( graphics_textureUnitsCound > 1 )
			graphics_multiTexturingEnabled = true;


		glMultiTexCoord1fARB = (PFNGLMULTITEXCOORD1FARBPROC)wglGetProcAddress("glMultiTexCoord1fARB");
		glMultiTexCoord2fARB = (PFNGLMULTITEXCOORD2FARBPROC)wglGetProcAddress("glMultiTexCoord2fARB");
		glMultiTexCoord3fARB = (PFNGLMULTITEXCOORD3FARBPROC)wglGetProcAddress("glMultiTexCoord3fARB");
		glMultiTexCoord4fARB = (PFNGLMULTITEXCOORD4FARBPROC)wglGetProcAddress("glMultiTexCoord4fARB");

		glActiveTextureARB = (PFNGLACTIVETEXTUREARBPROC)wglGetProcAddress("glActiveTextureARB");
		glClientActiveTextureARB = (PFNGLCLIENTACTIVETEXTUREARBPROC)wglGetProcAddress("glClientActiveTextureARB");
	}
	else
		console << "Note: Multitexturing not supported by your graphics card, this could slow video performace" << endline;

	if( extensions.find( "GL_ARB_imaging" ) )
	{
		glBlendEquation = (PFNGLBLENDEQUATIONPROC)wglGetProcAddress("glBlendEquation");
		graphics_Image_subsetEnabled = true;
	}

	if( extensions.find( "EXT_fog_coord" ) )
	{
		glFogCoordPointer = (PFNGLFOGCOORDPOINTERPROC)wglGetProcAddress("glFogCoordPointer");
		graphics_Fog = true;

		glFogCoordf = (PFNGLFOGCOORDFPROC)wglGetProcAddress("glFogCoordf");
	}

}

