blob: 754289625b7335ee1b8c21c98fc9f6eaa66a576f [file] [log] [blame]
/*
* ShaderEngine.hpp
*
* Created on: Jul 18, 2008
* Author: pete
*/
#ifndef SHADERENGINE_HPP_
#define SHADERENGINE_HPP_
#include "Common.hpp"
#ifdef USE_GLES1
#include <GLES/gl.h>
#else
#ifdef __APPLE__
#include <OpenGL/gl.h>
#include <OpenGL/glu.h>
#else
#include <GL/gl.h>
#include <GL/glu.h>
#endif
#endif
#ifdef USE_CG
#include <Cg/cg.h> /* Can't include this? Is Cg Toolkit installed! */
#include <Cg/cgGL.h>
#endif
#include "Pipeline.hpp"
#include "PipelineContext.hpp"
class ShaderEngine;
#include "TextureManager.hpp"
#include <cstdlib>
#include <iostream>
#include <map>
#include "Shader.hpp"
class ShaderEngine
{
#ifdef USE_CG
unsigned int mainTextureId;
int texsize;
float aspect;
BeatDetect *beatDetect;
TextureManager *textureManager;
GLuint noise_texture_lq_lite;
GLuint noise_texture_lq;
GLuint noise_texture_mq;
GLuint noise_texture_hq;
GLuint noise_texture_perlin;
GLuint noise_texture_lq_vol;
GLuint noise_texture_hq_vol;
bool blur1_enabled;
bool blur2_enabled;
bool blur3_enabled;
GLuint blur1_tex;
GLuint blur2_tex;
GLuint blur3_tex;
float rand_preset[4];
CGcontext myCgContext;
CGprofile myCgProfile;
CGprogram blur1Program;
CGprogram blur2Program;
bool enabled;
std::map<Shader*,CGprogram> programs;
std::string cgTemplate;
std::string blurProgram;
bool LoadCgProgram(Shader &shader);
bool checkForCgCompileError(const char *situation);
void checkForCgError(const char *situation);
void SetupCg();
void SetupCgVariables(CGprogram program, const Pipeline &pipeline, const PipelineContext &pipelineContext);
void SetupCgQVariables(CGprogram program, const Pipeline &pipeline);
void SetupUserTexture(CGprogram program, const UserTexture* texture);
void SetupUserTextureState(const UserTexture* texture);
#endif
public:
ShaderEngine();
virtual ~ShaderEngine();
#ifdef USE_CG
void RenderBlurTextures(const Pipeline &pipeline, const PipelineContext &pipelineContext, const int texsize);
void loadShader(Shader &shader);
void setParams(const int texsize, const unsigned int texId, const float aspect, BeatDetect *beatDetect, TextureManager *textureManager);
void enableShader(Shader &shader, const Pipeline &pipeline, const PipelineContext &pipelineContext);
void disableShader();
void reset();
void setAspect(float aspect);
std::string profileName;
#endif
};
#endif /* SHADERENGINE_HPP_ */