Main Page   Namespace List   Class Hierarchy   Alphabetical List   Compound List   File List   Namespace Members   Compound Members   File Members   Related Pages  

OgreGLSLGpuProgram.cpp

Go to the documentation of this file.
00001 /*
00002 -----------------------------------------------------------------------------
00003 This source file is part of OGRE
00004     (Object-oriented Graphics Rendering Engine)
00005 For the latest info, see http://www.ogre3d.org/
00006 
00007 Copyright © 2000-2003 The OGRE Team
00008 Also see acknowledgements in Readme.html
00009 
00010 This program is free software; you can redistribute it and/or modify it under
00011 the terms of the GNU Lesser General Public License as published by the Free Software
00012 Foundation; either version 2 of the License, or (at your option) any later
00013 version.
00014 
00015 This program is distributed in the hope that it will be useful, but WITHOUT
00016 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
00017 FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.
00018 
00019 You should have received a copy of the GNU Lesser General Public License along with
00020 this program; if not, write to the Free Software Foundation, Inc., 59 Temple
00021 Place - Suite 330, Boston, MA 02111-1307, USA, or go to
00022 http://www.gnu.org/copyleft/lesser.txt.
00023 -----------------------------------------------------------------------------
00024 */
00025 
00026 #include "OgreGLSLExtSupport.h"
00027 #include "OgreGLSLGpuProgram.h"
00028 #include "OgreGLSLLinkProgramManager.h"
00029 #include "OgreGLSLLinkProgram.h"
00030 #include "OgreGLSLProgram.h"
00031 
00032 namespace Ogre {
00033 
00034     GLuint GLSLGpuProgram::mVertexShaderCount = 0;
00035     GLuint GLSLGpuProgram::mFragmentShaderCount = 0;
00036 
00037     //-----------------------------------------------------------------------------
00038     GLSLGpuProgram::GLSLGpuProgram(GLSLProgram* parent) : GLGpuProgram(parent->getName(), parent->getType(), "glsl"), mGLSLProgram(parent)
00039     {
00040         if (parent->getType() == GPT_VERTEX_PROGRAM)
00041         {
00042             mProgramID = ++mVertexShaderCount;
00043         }
00044         else
00045         {
00046             mProgramID = ++mFragmentShaderCount;
00047         }
00048 
00049         // there is nothing to load
00050         mLoadFromFile = false;
00051 
00052     }
00053 
00054     //-----------------------------------------------------------------------------
00055     void GLSLGpuProgram::load(void)
00056     {
00057         mIsLoaded = true;
00058     }
00059 
00060     //-----------------------------------------------------------------------------
00061     void GLSLGpuProgram::unload(void)
00062     {
00063         // nothing to unload
00064     }
00065 
00066     //-----------------------------------------------------------------------------
00067     void GLSLGpuProgram::loadFromSource(void)
00068     {
00069         // nothing to load
00070     }
00071 
00072     //-----------------------------------------------------------------------------
00073     void GLSLGpuProgram::bindProgram(void)
00074     {
00075         // tell the Link Program Manager what shader is to become active
00076         if (mType == GPT_VERTEX_PROGRAM)
00077         {
00078             GLSLLinkProgramManager::getSingleton().setActiveVertexShader( this );
00079         }
00080         else // its a fragment shader
00081         {
00082             GLSLLinkProgramManager::getSingleton().setActiveFragmentShader( this );
00083         }
00084     }
00085 
00086     //-----------------------------------------------------------------------------
00087     void GLSLGpuProgram::unbindProgram(void)
00088     {
00089         // tell the Link Program Manager what shader is to become inactive
00090         if (mType == GPT_VERTEX_PROGRAM)
00091         {
00092             GLSLLinkProgramManager::getSingleton().setActiveVertexShader( NULL );
00093         }
00094         else // its a fragment shader
00095         {
00096             GLSLLinkProgramManager::getSingleton().setActiveFragmentShader( NULL );
00097         }
00098 
00099     }
00100 
00101     //-----------------------------------------------------------------------------
00102     void GLSLGpuProgram::bindProgramParameters(GpuProgramParametersSharedPtr params)
00103     {
00104         // activate the link program object
00105         GLSLLinkProgram* linkProgram = GLSLLinkProgramManager::getSingleton().getActiveLinkProgram();
00106         // pass on parameters from params to program object uniforms
00107         linkProgram->updateUniforms( params );
00108         
00109     }
00110 
00111 
00112 }
00113 

Copyright © 2002-2003 by The OGRE Team
Last modified Sun Nov 28 19:48:26 2004