/*
	ZOpenGLShader.hpp
	Author: Chris Ertel <crertel@762studios.com>,
			James Russell <jcrussell@762studios.com>
	Created: 04/20/2011

	Purpose: 
	
	OpenGL implementation of the shader interface.

	License:

	TODO
*/

#pragma once

#ifndef _ZOPENGLSHADER_HPP
#define _ZOPENGLSHADER_HPP

#include <ZRenderer/ZShaderBase.hpp>

#include <ZUtil/ZUtil.hpp>

#include <SST/SST_GLAPI.h>

//Forward Declarations
class ZOpenGLRenderer;

/*
OpenGL Shader Implementation.
*/
class ZOpenGLShader : public ZShaderBase
{
private:
	DISABLE_COPY_AND_ASSIGN(ZOpenGLShader);

protected:
	//The renderer that created us
	ZOpenGLRenderer* Renderer;

	//Method used to compile the shader 
	static void Compile_(ZThread* _thread, void* _shader);

public:
	//OpenGL Shader Handle
	GLuint GLHandle;

	/*
	Constructor.

	@param _renderer - the current renderer instance
	@param _type - the type of shader
	*/
	ZOpenGLShader(ZOpenGLRenderer* _renderer, ZShaderType _type);

	/*
	Destructor.
	*/
	virtual ~ZOpenGLShader();

	//Subclass Override
	virtual bool Compile();
};

#endif
