More shader-related changes
This commit is contained in:
parent
047e9525ff
commit
69e0f3c691
|
|
@ -11,23 +11,14 @@
|
|||
|
||||
#define SOURCES \
|
||||
config_effects.h \
|
||||
cgShader.I cgShader.h \
|
||||
cgShaderAttrib.I cgShaderAttrib.h \
|
||||
cgShaderContext.I cgShaderContext.h \
|
||||
lensFlareNode.I lensFlareNode.h
|
||||
|
||||
#define INCLUDED_SOURCES \
|
||||
config_effects.cxx \
|
||||
cgShader.cxx \
|
||||
cgShaderAttrib.cxx \
|
||||
cgShaderContext.cxx \
|
||||
lensFlareNode.cxx
|
||||
|
||||
#define INSTALL_HEADERS \
|
||||
config_effects.h \
|
||||
cgShader.I cgShader.h \
|
||||
cgShaderAttrib.I cgShaderAttrib.h \
|
||||
cgShaderContext.I cgShaderContext.h \
|
||||
lensFlareNode.I lensFlareNode.h
|
||||
|
||||
#define IGATESCAN all
|
||||
|
|
|
|||
|
|
@ -1,144 +0,0 @@
|
|||
// Filename: cgShader.I
|
||||
// Created by: sshodhan (10Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::get_name
|
||||
// Access: Public
|
||||
// Description: Every CgShader object has a name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE string CgShader::
|
||||
get_name() const {
|
||||
return _name;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param texture
|
||||
// Access: Public
|
||||
// Description: Store texture in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, Texture *t) {
|
||||
_cg_textures[pname] = t;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param matrix
|
||||
// Access: Public
|
||||
// Description: Store Matrix type and Transform in the map to associate
|
||||
// with param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, Matrix_Type m, Transform_Type t) {
|
||||
CGMATRIXDEF cgm;
|
||||
cgm.matrix = m;
|
||||
cgm.transform = t;
|
||||
_cg_matrices[pname] = cgm;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param 1f
|
||||
// Access: Public
|
||||
// Description: Store 1f in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, float p1f) {
|
||||
_cg_params1f[pname] = p1f;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param 2f
|
||||
// Access: Public
|
||||
// Description: Store 2f in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, LVector2f p2f) {
|
||||
_cg_params2f[pname] = p2f;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param 3f
|
||||
// Access: Public
|
||||
// Description: Store 3f in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, LVector3f p3f) {
|
||||
_cg_params3f[pname] = p3f;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param 4f
|
||||
// Access: Public
|
||||
// Description: Store 4f in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, LVector4f p4f) {
|
||||
_cg_params4f[pname] = p4f;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param 1d
|
||||
// Access: Public
|
||||
// Description: Store 1d in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, double p1d) {
|
||||
_cg_params1d[pname] = p1d;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param 2d
|
||||
// Access: Public
|
||||
// Description: Store 2d in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, LVector2d p2d) {
|
||||
_cg_params2d[pname] = p2d;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param 3d
|
||||
// Access: Public
|
||||
// Description: Store 3d in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, LVector3d p3d) {
|
||||
_cg_params3d[pname] = p3d;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::set_param 4d
|
||||
// Access: Public
|
||||
// Description: Store 4d in the map to associate with
|
||||
// param name
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShader::
|
||||
set_param(const string &pname, LVector4d p4d) {
|
||||
_cg_params4d[pname] = p4d;
|
||||
}
|
||||
|
||||
|
|
@ -1,406 +0,0 @@
|
|||
// Filename: cgShader.cxx
|
||||
// Created by: sshodhan (10Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "pandabase.h"
|
||||
|
||||
#ifdef HAVE_CG
|
||||
|
||||
#include "cgShader.h"
|
||||
#include "config_effects.h"
|
||||
TypeHandle CgShader::_type_handle;
|
||||
#include <Cg/cg.h>
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::init_cg
|
||||
// Access: Published
|
||||
// Description: Create a cgContext. Note that this is completely
|
||||
// different from Panda's CgShaderContext and its
|
||||
// derived GLCgShaderContext (or Dx9CgShaderContext)
|
||||
// This is a Cg API specific context.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool CgShader::
|
||||
init_cg() {
|
||||
// Create a new context for our Cg Program(s)
|
||||
cgContext = cgCreateContext();
|
||||
|
||||
if (cgContext == NULL) {
|
||||
express_cat.error()
|
||||
<< "Could not create Cg context\n" ;
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::load_shaders
|
||||
// Access: Published
|
||||
// Description: this is called after the instantiating a
|
||||
// CgShaderContext because we need the profiles
|
||||
// which are initiated by a GL or DX specific
|
||||
// CgShaderContext.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool CgShader::
|
||||
load_shaders(){
|
||||
|
||||
// Load And Compile the shaders from file
|
||||
cgVertexProgram = cgCreateProgramFromFile(cgContext,
|
||||
CG_SOURCE, _vertex_shader.c_str(), cgVertexProfile, "main", 0);
|
||||
cgFragmentProgram = cgCreateProgramFromFile(cgContext,
|
||||
CG_SOURCE, _fragment_shader.c_str(), cgFragmentProfile, "main", 0);
|
||||
|
||||
// Validate Success
|
||||
if (cgVertexProgram == NULL) {
|
||||
// We Need To Determine What Went Wrong
|
||||
CGerror Error = cgGetError();
|
||||
effects_cat.error()
|
||||
<< "VERTEX SHADER " << cgGetErrorString(Error) << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
if (cgFragmentProgram == NULL) {
|
||||
// We Need To Determine What Went Wrong
|
||||
CGerror Error = cgGetError();
|
||||
effects_cat.error()
|
||||
<< "PIXEL SHADER " << cgGetErrorString(Error) << "\n";
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
// Now that our programs are loaded we can actually
|
||||
// access their handles with cgGetNamedParameter
|
||||
// The python programmer specifies parameter names and
|
||||
// handle names when he calles add_param
|
||||
// So lets go through all the handles and associate them with
|
||||
// CGparameter objects
|
||||
|
||||
HANDLES::const_iterator param_iter; // Use this to go through all params
|
||||
|
||||
// Matrix handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_matrix_handles.begin();
|
||||
param_iter !=_vertex_matrix_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_matrix_params.insert(vert_param);
|
||||
}
|
||||
// Fragment
|
||||
for (param_iter = _fragment_matrix_handles.begin();
|
||||
param_iter != _fragment_matrix_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_matrix_params.insert(frag_param);
|
||||
|
||||
}
|
||||
|
||||
|
||||
// Texture handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_texture_handles.begin();
|
||||
param_iter != _vertex_texture_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_texture_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_texture_handles.begin();
|
||||
param_iter != _fragment_texture_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_texture_params.insert(frag_param);
|
||||
}
|
||||
|
||||
// 1F handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_1f_handles.begin();
|
||||
param_iter != _vertex_1f_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_1f_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_1f_handles.begin();
|
||||
param_iter != _fragment_1f_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_1f_params.insert(frag_param);
|
||||
}
|
||||
|
||||
|
||||
// 2F handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_2f_handles.begin();
|
||||
param_iter != _vertex_2f_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_2f_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_2f_handles.begin();
|
||||
param_iter != _fragment_2f_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_2f_params.insert(frag_param);
|
||||
}
|
||||
|
||||
// 3F handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_3f_handles.begin();
|
||||
param_iter != _vertex_3f_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_3f_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_3f_handles.begin();
|
||||
param_iter != _fragment_3f_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_3f_params.insert(frag_param);
|
||||
}
|
||||
|
||||
// 4F handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_4f_handles.begin();
|
||||
param_iter != _vertex_4f_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_4f_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_4f_handles.begin();
|
||||
param_iter != _fragment_4f_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_4f_params.insert(frag_param);
|
||||
}
|
||||
|
||||
// 1D handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_1d_handles.begin();
|
||||
param_iter != _vertex_1d_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_1d_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_1d_handles.begin();
|
||||
param_iter != _fragment_1d_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_1d_params.insert(frag_param);
|
||||
}
|
||||
|
||||
|
||||
// 2D handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_2d_handles.begin();
|
||||
param_iter != _vertex_2d_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_2d_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_2d_handles.begin();
|
||||
param_iter != _fragment_2d_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_2d_params.insert(frag_param);
|
||||
}
|
||||
|
||||
// 3D handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_3d_handles.begin();
|
||||
param_iter != _vertex_3d_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_3d_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_3d_handles.begin();
|
||||
param_iter != _fragment_3d_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_3d_params.insert(frag_param);
|
||||
}
|
||||
|
||||
// 4D handles
|
||||
// Vertex
|
||||
for (param_iter = _vertex_4d_handles.begin();
|
||||
param_iter != _vertex_4d_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgVertexProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type vert_param(param_iter->first, p);
|
||||
_vertex_4d_params.insert(vert_param);
|
||||
}
|
||||
//Fragment
|
||||
for (param_iter = _fragment_4d_handles.begin();
|
||||
param_iter != _fragment_4d_handles.end(); param_iter++) {
|
||||
p = cgGetNamedParameter(cgFragmentProgram, param_iter->second.c_str());
|
||||
CGPARAMETER::value_type frag_param(param_iter->first, p);
|
||||
_fragment_4d_params.insert(frag_param);
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::Constructor
|
||||
// Access: Published
|
||||
// Description: Use to construct a new CgShader object.
|
||||
// Pass filenames for the vertex and fragment programs
|
||||
////////////////////////////////////////////////////////////////////
|
||||
CgShader::
|
||||
CgShader(const string &name, const string &vertex_shader,
|
||||
const string &fragment_shader) {
|
||||
_name = name;
|
||||
_vertex_shader = vertex_shader;
|
||||
_fragment_shader = fragment_shader;
|
||||
init_cg();
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::Destructor
|
||||
// Access: Public
|
||||
// Description: We need to clean up the CGcontext
|
||||
////////////////////////////////////////////////////////////////////
|
||||
CgShader::
|
||||
~CgShader() {
|
||||
cgDestroyContext(cgContext);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShader::add_param
|
||||
// Access: Published
|
||||
// Description: Add a new parameter
|
||||
// Specify its name, name in the shader program (handle name)
|
||||
// bind type, parameter type and whether its a vertex
|
||||
// or fragment parameter
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShader::
|
||||
add_param(const string &pname, const string &handle_name,
|
||||
Param_Type t, Bind_Type b, bool vert_or_frag) {
|
||||
|
||||
/* We have only per-frame binding
|
||||
if (b == BONCE) {
|
||||
_bind_once.push_back(pname);
|
||||
} else if (b == BFRAME) {
|
||||
_bind_frame.push_back(pname);
|
||||
} else if (b == BVERTEX) {
|
||||
_bind_vertex.push_back(pname);
|
||||
}
|
||||
*/
|
||||
|
||||
// Add to the <parameter name, handle name> map
|
||||
// Later, once we have loaded the cg programs
|
||||
// this handles map is traversed and associations
|
||||
// are made with the CGparameter objects
|
||||
// using the cgGetNamedParameter function
|
||||
if (t == P1F) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_1f_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_1f_handles.insert(param_handle);
|
||||
}
|
||||
}else if (t == P2F) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_2f_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_2f_handles.insert(param_handle);
|
||||
}
|
||||
}else if (t == P3F) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_3f_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_3f_handles.insert(param_handle);
|
||||
}
|
||||
}else if (t == P4F) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_4f_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_4f_handles.insert(param_handle);
|
||||
}
|
||||
}else if (t == P1D) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_1d_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_1d_handles.insert(param_handle);
|
||||
}
|
||||
}else if (t == P2D) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_2d_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_2d_handles.insert(param_handle);
|
||||
}
|
||||
}else if (t == P3D) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_3d_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_3d_handles.insert(param_handle);
|
||||
}
|
||||
}else if (t == P4D) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_4d_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_4d_handles.insert(param_handle);
|
||||
}
|
||||
} else if (t == PTEXTURE) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_texture_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_texture_handles.insert(param_handle);
|
||||
}
|
||||
} else if (t == PMATRIX) {
|
||||
if (vert_or_frag) {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_vertex_matrix_handles.insert(param_handle);
|
||||
} else {
|
||||
HANDLES::value_type param_handle(pname, handle_name);
|
||||
_fragment_matrix_handles.insert(param_handle);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
#endif // HAVE_CG
|
||||
|
||||
|
|
@ -1,275 +0,0 @@
|
|||
// Filename: cgShader.h
|
||||
// Created by: sshodhan (10Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CGSHADER_H
|
||||
#define CGSHADER_H
|
||||
|
||||
#include "pandabase.h"
|
||||
|
||||
#ifdef HAVE_CG
|
||||
|
||||
#include "luse.h"
|
||||
#include "pmap.h"
|
||||
#include "typedWritableReferenceCount.h"
|
||||
#include "texture.h"
|
||||
#include "dcast.h"
|
||||
#include <Cg/cg.h>
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : CgShader
|
||||
// Summary: CgShader object initializes shader programs and
|
||||
// sets up the parameters and their values
|
||||
// A GL or DX CgShaderContext uses this object at bind time
|
||||
// to send parameters to a shader program.
|
||||
//
|
||||
// Detailed: A CgShader object is created with a name and
|
||||
// file names for a vertex program and fragment program
|
||||
// It is then passed to a CgShaderAttrib::make function
|
||||
//
|
||||
// Passing parameters to your shader programs is done
|
||||
// in two steps:
|
||||
// 1) Add the param, specifying:
|
||||
// a) Its name and corresponding handle in the Cg program
|
||||
// b) Its type - matrix/ texture/ number(s)
|
||||
// c) Its bind type: Right now everything is bound per frame
|
||||
// d) Whether its for a vertex shader or a fragment shader
|
||||
// 2) Set its value(s)
|
||||
//
|
||||
// We store maps containing associations between
|
||||
// - parameter names and handle names
|
||||
// - parameter names and parameter objects (Cgparameter)
|
||||
// - parameter names and their actual values
|
||||
// It has different named maps for different types of params
|
||||
// There's also a fragment map and a vertex map for each
|
||||
// These maps are populated and then this object gets
|
||||
// pointed to from a CgShaderContext (right now only GL)
|
||||
// The Shadercontext does the actual "sending" of the params.
|
||||
//
|
||||
// To make a cg shader variable get its values from a Panda
|
||||
// program we define it as "uniform" in our cg shader program
|
||||
//
|
||||
// We refer to the names of the variables in the .cg shader
|
||||
// program file as "handles"
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class EXPCL_PANDAFX CgShader: public TypedWritableReferenceCount {
|
||||
|
||||
PUBLISHED:
|
||||
|
||||
enum Bind_Type {
|
||||
BONCE,
|
||||
BFRAME,
|
||||
BVERTEX,
|
||||
};
|
||||
|
||||
enum Param_Type {
|
||||
PMATRIX,
|
||||
PTEXTURE,
|
||||
P1F,
|
||||
P2F,
|
||||
P3F,
|
||||
P4F,
|
||||
P1D,
|
||||
P2D,
|
||||
P3D,
|
||||
P4D,
|
||||
};
|
||||
|
||||
// Cg allows us to pass combinatios any of these four matrices
|
||||
// with any of the four transforms enumerated below
|
||||
enum Matrix_Type {
|
||||
MTXMODELVIEW,
|
||||
MTXPROJECTION,
|
||||
MTXTEXTURE,
|
||||
MTXMODELVIEWPROJECTION,
|
||||
};
|
||||
|
||||
enum Transform_Type {
|
||||
TRFIDENTITY,
|
||||
TRFTRANSPOSE,
|
||||
TRFINVERSE,
|
||||
TRFINVERSETRANSPOSE,
|
||||
};
|
||||
|
||||
CgShader(const string &name, const string &v_s , const string &f_s);
|
||||
|
||||
// First step for parameters: Add them and specify name, cg hande name,
|
||||
// type, bind and vertex/fragment( 1 for vertex program 0 for fragment)
|
||||
void add_param(const string &pname, const string &handle_name,
|
||||
Param_Type t, Bind_Type b, bool vert_or_frag);
|
||||
|
||||
// Overloaded set_param to be used based on your param type
|
||||
INLINE void set_param(const string &pname, Texture *t);
|
||||
INLINE void set_param(const string &pname, Matrix_Type m, Transform_Type t);
|
||||
INLINE void set_param(const string &pname, float p1f);
|
||||
INLINE void set_param(const string &pname, LVector2f p2f);
|
||||
INLINE void set_param(const string &pname, LVector3f p3f);
|
||||
INLINE void set_param(const string &pname, LVector4f p4f);
|
||||
INLINE void set_param(const string &pname, double p1d);
|
||||
INLINE void set_param(const string &pname, LVector2d p2d);
|
||||
INLINE void set_param(const string &pname, LVector3d p3d);
|
||||
INLINE void set_param(const string &pname, LVector4d p4d);
|
||||
|
||||
public:
|
||||
CGcontext cgContext;// A context to hold our Cg program(s)
|
||||
CGprogram cgVertexProgram;// A handle to the vertex shader .cg file
|
||||
CGprogram cgFragmentProgram;// A handle to the pixel shader .cg file
|
||||
CGprofile cgVertexProfile;// Vertex profile... different features on various cards
|
||||
CGprofile cgFragmentProfile;// Profile for Pixel Shader
|
||||
CGparameter p; // Used to insert Cgparameter objects into the maps
|
||||
|
||||
// Matrix parameters need to know type of Matrix and its transform
|
||||
typedef struct {
|
||||
Matrix_Type matrix;
|
||||
Transform_Type transform;
|
||||
}CGMATRIXDEF;
|
||||
|
||||
typedef pmap<string, string> HANDLES;
|
||||
typedef pmap<string, CGparameter> CGPARAMETER;
|
||||
typedef pmap<string, PT(Texture) > CGTEXTURE;
|
||||
typedef pmap<string, CGMATRIXDEF> CGMATRIX;
|
||||
typedef pmap<string, float> CGPARAM1F;
|
||||
typedef pmap<string, LVector2f> CGPARAM2F;
|
||||
typedef pmap<string, LVector3f> CGPARAM3F;
|
||||
typedef pmap<string, LVector4f> CGPARAM4F;
|
||||
typedef pmap<string, double> CGPARAM1D;
|
||||
typedef pmap<string, LVector2d> CGPARAM2D;
|
||||
typedef pmap<string, LVector3d> CGPARAM3D;
|
||||
typedef pmap<string, LVector4d> CGPARAM4D;
|
||||
|
||||
|
||||
// add_param adds to these maps
|
||||
CGPARAMETER _vertex_1f_params;
|
||||
CGPARAMETER _fragment_1f_params;
|
||||
|
||||
CGPARAMETER _vertex_2f_params;
|
||||
CGPARAMETER _fragment_2f_params;
|
||||
|
||||
CGPARAMETER _vertex_3f_params;
|
||||
CGPARAMETER _fragment_3f_params;
|
||||
|
||||
CGPARAMETER _vertex_4f_params;
|
||||
CGPARAMETER _fragment_4f_params;
|
||||
|
||||
CGPARAMETER _vertex_1d_params;
|
||||
CGPARAMETER _fragment_1d_params;
|
||||
|
||||
CGPARAMETER _vertex_2d_params;
|
||||
CGPARAMETER _fragment_2d_params;
|
||||
|
||||
CGPARAMETER _vertex_3d_params;
|
||||
CGPARAMETER _fragment_3d_params;
|
||||
|
||||
CGPARAMETER _vertex_4d_params;
|
||||
CGPARAMETER _fragment_4d_params;
|
||||
|
||||
CGPARAMETER _vertex_matrix_params;
|
||||
CGPARAMETER _fragment_matrix_params;
|
||||
|
||||
CGPARAMETER _vertex_texture_params;
|
||||
CGPARAMETER _fragment_texture_params;
|
||||
|
||||
HANDLES _vertex_1f_handles;
|
||||
HANDLES _fragment_1f_handles;
|
||||
|
||||
HANDLES _vertex_2f_handles;
|
||||
HANDLES _fragment_2f_handles;
|
||||
|
||||
HANDLES _vertex_3f_handles;
|
||||
HANDLES _fragment_3f_handles;
|
||||
|
||||
HANDLES _vertex_4f_handles;
|
||||
HANDLES _fragment_4f_handles;
|
||||
|
||||
HANDLES _vertex_1d_handles;
|
||||
HANDLES _fragment_1d_handles;
|
||||
|
||||
HANDLES _vertex_2d_handles;
|
||||
HANDLES _fragment_2d_handles;
|
||||
|
||||
HANDLES _vertex_3d_handles;
|
||||
HANDLES _fragment_3d_handles;
|
||||
|
||||
HANDLES _vertex_4d_handles;
|
||||
HANDLES _fragment_4d_handles;
|
||||
|
||||
HANDLES _vertex_matrix_handles;
|
||||
HANDLES _fragment_matrix_handles;
|
||||
|
||||
HANDLES _vertex_texture_handles;
|
||||
HANDLES _fragment_texture_handles;
|
||||
|
||||
|
||||
// set_param adds to these maps
|
||||
CGTEXTURE _cg_textures;
|
||||
CGMATRIX _cg_matrices;
|
||||
CGPARAM1F _cg_params1f;
|
||||
CGPARAM2F _cg_params2f;
|
||||
CGPARAM3F _cg_params3f;
|
||||
CGPARAM4F _cg_params4f;
|
||||
CGPARAM1D _cg_params1d;
|
||||
CGPARAM2D _cg_params2d;
|
||||
CGPARAM3D _cg_params3d;
|
||||
CGPARAM4D _cg_params4d;
|
||||
|
||||
INLINE string get_name() const;
|
||||
|
||||
|
||||
bool init_cg();// This initializes a CGcontext
|
||||
|
||||
// After a CgShaderContext (GL or DX) has been created
|
||||
// this function loads vertex and fragment programs
|
||||
// from the hard disk.
|
||||
// Only after this is done can we associate our
|
||||
// Cgparameter objects with the handles
|
||||
// The CgShaderContext then loads these programs
|
||||
// into the GPU
|
||||
bool load_shaders();
|
||||
|
||||
~CgShader();
|
||||
|
||||
string _name;
|
||||
string _vertex_shader;
|
||||
string _fragment_shader;
|
||||
|
||||
|
||||
public:
|
||||
static TypeHandle get_class_type() {
|
||||
return _type_handle;
|
||||
}
|
||||
static void init_type() {
|
||||
TypedWritableReferenceCount::init_type();
|
||||
register_type(_type_handle, "CgShader",
|
||||
TypedWritableReferenceCount::get_class_type());
|
||||
}
|
||||
virtual TypeHandle get_type() const {
|
||||
return get_class_type();
|
||||
}
|
||||
virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
|
||||
|
||||
private:
|
||||
static TypeHandle _type_handle;
|
||||
};
|
||||
|
||||
#include "cgShader.I"
|
||||
|
||||
#endif // HAVE_CG
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -1,53 +0,0 @@
|
|||
// Filename: cgShaderAttrib.I
|
||||
// Created by: sshodhan (10Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::Constructor
|
||||
// Access: Private
|
||||
// Description: Use CgShaderAttrib::make() to construct a new
|
||||
// CgShaderAttrib object.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE CgShaderAttrib::
|
||||
CgShaderAttrib() {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::is_off
|
||||
// Access: Published
|
||||
// Description: Returns true if the CgShaderAttrib is an 'off'
|
||||
// CgShaderAttrib, indicating that it should disable
|
||||
// the previous shader profiles
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE bool CgShaderAttrib::
|
||||
is_off() const {
|
||||
return _cg_shader == (CgShader *)NULL;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::get_cg_shader
|
||||
// Access: Published
|
||||
// Description: If the CgShaderAttrib is not an 'off' CgShaderAttrib,
|
||||
// returns the shader that is associated. Otherwise,
|
||||
// return NULL.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE CgShader *CgShaderAttrib::
|
||||
get_cg_shader() const {
|
||||
return _cg_shader;
|
||||
}
|
||||
|
||||
|
|
@ -1,199 +0,0 @@
|
|||
// Filename: cgShaderAttrib.cxx
|
||||
// Created by: sshodhan (10Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "pandabase.h"
|
||||
|
||||
#ifdef HAVE_CG
|
||||
|
||||
#include "cgShaderAttrib.h"
|
||||
#include "config_effects.h"
|
||||
#include "graphicsStateGuardianBase.h"
|
||||
#include "bamReader.h"
|
||||
#include "bamWriter.h"
|
||||
#include "datagram.h"
|
||||
#include "datagramIterator.h"
|
||||
|
||||
|
||||
TypeHandle CgShaderAttrib::_type_handle;
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::make
|
||||
// Access: Published, Static
|
||||
// Description: Constructs a new CgShaderAttrib object suitable for
|
||||
// process the indicated geometry with shaders
|
||||
////////////////////////////////////////////////////////////////////
|
||||
CPT(RenderAttrib) CgShaderAttrib::
|
||||
make(CgShader *shader) {
|
||||
CgShaderAttrib *attrib = new CgShaderAttrib;
|
||||
attrib->_cg_shader = shader;
|
||||
attrib->_always_reissue = true; // This makes the CgShader node issue every frame
|
||||
return return_new(attrib);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::make_off
|
||||
// Access: Published, Static
|
||||
// Description: Constructs a new CgShaderAttrib object suitable for
|
||||
// rendering geometry with no shader interference
|
||||
////////////////////////////////////////////////////////////////////
|
||||
CPT(RenderAttrib) CgShaderAttrib::
|
||||
make_off() {
|
||||
CgShaderAttrib *attrib = new CgShaderAttrib;
|
||||
return return_new(attrib);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::issue
|
||||
// Access: Public, Virtual
|
||||
// Description: Calls the appropriate method on the indicated GSG
|
||||
// to issue the graphics commands appropriate to the
|
||||
// given attribute. This is normally called
|
||||
// (indirectly) only from
|
||||
// GraphicsStateGuardian::set_state() or modify_state().
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShaderAttrib::
|
||||
issue(GraphicsStateGuardianBase *gsg) const {
|
||||
gsg->issue_cg_shader_bind(this);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::make_default_impl
|
||||
// Access: Protected, Virtual
|
||||
// Description: Intended to be overridden by derived CgShaderAttrib
|
||||
// types to specify what the default property for a
|
||||
// TexGenAttrib of this type should be.
|
||||
//
|
||||
// This should return a newly-allocated CgShaderAttrib of
|
||||
// the same type that corresponds to whatever the
|
||||
// standard default for this kind of CgShaderAttrib is.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
RenderAttrib *CgShaderAttrib::
|
||||
make_default_impl() const {
|
||||
return new CgShaderAttrib;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::compare_to_impl
|
||||
// Access: Protected, Virtual
|
||||
// Description: Intended to be overridden by derived CgShaderAttrib
|
||||
// types to return a unique number indicating whether
|
||||
// this CgShaderAttrib is equivalent to the other one.
|
||||
//
|
||||
// This should return 0 if the two CgShaderAttrib objects
|
||||
// are equivalent, a number less than zero if this one
|
||||
// should be sorted before the other one, and a number
|
||||
// greater than zero otherwise.
|
||||
//
|
||||
// This will only be called with two CgShaderAttrib
|
||||
// objects whose get_type() functions return the same.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
int CgShaderAttrib::
|
||||
compare_to_impl(const RenderAttrib *other) const {
|
||||
const CgShaderAttrib *cgsa;
|
||||
DCAST_INTO_R(cgsa, other, 0);
|
||||
|
||||
// Comparing pointers by subtraction is problematic. Instead of
|
||||
// doing this, we'll just depend on the built-in != and < operators
|
||||
// for comparing pointers.
|
||||
if (_cg_shader != cgsa->_cg_shader) {
|
||||
return _cg_shader < cgsa->_cg_shader ? -1 : 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/*
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::output
|
||||
// Access: Public, Virtual
|
||||
// Description:
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShaderAttrib::
|
||||
output(ostream &out) const {
|
||||
out << get_type() << ":";
|
||||
if (is_off()) {
|
||||
out << "(off)";
|
||||
} else {
|
||||
out << _cg_shader->get_name();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::register_with_read_factory
|
||||
// Access: Public, Static
|
||||
// Description: Tells the BamReader how to create objects of type
|
||||
// CgShaderAttrib.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShaderAttrib::
|
||||
register_with_read_factory() {
|
||||
BamReader::get_factory()->register_factory(get_class_type(), make_from_bam);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::write_datagram
|
||||
// Access: Public, Virtual
|
||||
// Description: Writes the contents of this object to the datagram
|
||||
// for shipping out to a Bam file.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShaderAttrib::
|
||||
write_datagram(BamWriter *manager, Datagram &dg) {
|
||||
RenderAttrib::write_datagram(manager, dg);
|
||||
|
||||
manager->write_pointer(dg, _cg_shader);
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::make_from_bam
|
||||
// Access: Protected, Static
|
||||
// Description: This function is called by the BamReader's factory
|
||||
// when a new object of type CgShaderAttrib is encountered
|
||||
// in the Bam file. It should create the CgShaderAttrib
|
||||
// and extract its information from the file.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
TypedWritable *CgShaderAttrib::
|
||||
make_from_bam(const FactoryParams ¶ms) {
|
||||
CgShaderAttrib *attrib = new CgShaderAttrib;
|
||||
DatagramIterator scan;
|
||||
BamReader *manager;
|
||||
|
||||
parse_params(params, scan, manager);
|
||||
attrib->fillin(scan, manager);
|
||||
|
||||
return attrib;
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderAttrib::fillin
|
||||
// Access: Protected
|
||||
// Description: This internal function is called by make_from_bam to
|
||||
// read in all of the relevant data from the BamFile for
|
||||
// the new CgShaderAttrib.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShaderAttrib::
|
||||
fillin(DatagramIterator &scan, BamReader *manager) {
|
||||
RenderAttrib::fillin(scan, manager);
|
||||
|
||||
// Read the _texture pointer.
|
||||
manager->read_pointer(scan);
|
||||
}
|
||||
*/
|
||||
|
||||
#endif // HAVE_CG
|
||||
|
|
@ -1,106 +0,0 @@
|
|||
// Filename: cgShaderAttrib.h
|
||||
// Created by: sshodhan (10Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CGSHADERATTRIB_H
|
||||
#define CGSHADERATTRIB_H
|
||||
|
||||
#include "pandabase.h"
|
||||
|
||||
// In case we don't have HAVE_CG defined, we need to have at least a
|
||||
// forward reference to the class so the gsg's issue_cg_shader_bind()
|
||||
// method can be compiled.
|
||||
class CgShaderAttrib;
|
||||
|
||||
#ifdef HAVE_CG
|
||||
|
||||
#include "luse.h"
|
||||
#include "pmap.h"
|
||||
#include "cgShader.h"
|
||||
#include "renderAttrib.h"
|
||||
#include "typedObject.h"
|
||||
#include "typedReferenceCount.h"
|
||||
#include "pointerTo.h"
|
||||
#include "factoryParam.h"
|
||||
#include "dcast.h"
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : CgShaderAttrib
|
||||
// Description : Cg is Nvidia's high level shading language
|
||||
// Setting this attrib on a node will make that node
|
||||
// pass through a vertex and fragment program on the GPU
|
||||
// These programs must be passed through a CgShader object
|
||||
// to the make function of this attrib
|
||||
// All existing states will collapse
|
||||
// You will need to pass in the right matrices
|
||||
// to transform the object
|
||||
// All textures will have to be passed again manually
|
||||
// and applied by the fragment program.
|
||||
// You can also pass other parameters such as floating
|
||||
// point and double precision numbers
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class EXPCL_PANDAFX CgShaderAttrib: public RenderAttrib {
|
||||
|
||||
private:
|
||||
INLINE CgShaderAttrib();
|
||||
|
||||
PUBLISHED:
|
||||
static CPT(RenderAttrib) make(CgShader *shader);
|
||||
static CPT(RenderAttrib) make_off();
|
||||
|
||||
INLINE bool is_off() const;
|
||||
INLINE CgShader *get_cg_shader() const;
|
||||
|
||||
public:
|
||||
virtual void issue(GraphicsStateGuardianBase *gsg) const;
|
||||
|
||||
protected:
|
||||
virtual RenderAttrib *make_default_impl() const;
|
||||
virtual int compare_to_impl(const RenderAttrib *other) const;
|
||||
|
||||
private:
|
||||
PT(CgShader) _cg_shader;
|
||||
|
||||
public:
|
||||
static TypeHandle get_class_type() {
|
||||
return _type_handle;
|
||||
}
|
||||
static void init_type() {
|
||||
RenderAttrib::init_type();
|
||||
register_type(_type_handle, "CgShaderAttrib",
|
||||
RenderAttrib::get_class_type());
|
||||
}
|
||||
virtual TypeHandle get_type() const {
|
||||
return get_class_type();
|
||||
}
|
||||
virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
|
||||
|
||||
private:
|
||||
static TypeHandle _type_handle;
|
||||
};
|
||||
|
||||
|
||||
#include "cgShaderAttrib.I"
|
||||
|
||||
#endif // HAVE_CG
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,139 +0,0 @@
|
|||
// Filename: cgShaderContext.I
|
||||
// Created by: sshodhan (20Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::Constructor
|
||||
// Access: Published
|
||||
// Description: Use CgShaderContext() to construct a new
|
||||
// CgShaderContext object.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE CgShaderContext::
|
||||
CgShaderContext(PT(CgShader) cg_shader) :
|
||||
_cg_shader(cg_shader) {
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set 1f parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, const float value, bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set 1d parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, const double value, bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set 2f parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, const float value1, const float value2,
|
||||
bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set 2d parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, const double value1, const double value2,
|
||||
bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set 3f parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, const float value1, const float value2,
|
||||
const float value3, bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set 3d parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, const double value1, const double value2,
|
||||
const double value3, bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set 4f parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, const float value1, const float value2,
|
||||
const float value3, const float value4, bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set 4d parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, const double value1, const double value2,
|
||||
const double value3, const double value4, bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set Texture parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
set_param(const string &pname, Texture *t , bool vert_or_frag, GraphicsStateGuardianBase *gsg) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::enable_texture_param
|
||||
// Access: Published
|
||||
// Description: Enable a Texture parameter
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
enable_texture_param(const string &pname, bool vert_or_frag) {
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::enable_texture_param
|
||||
// Access: Published
|
||||
// Description: Disable a Texture parameter
|
||||
////////////////////////////////////////////////////////////////////
|
||||
INLINE void CgShaderContext::
|
||||
disable_texture_param(const string &pname, bool vert_or_frag) {
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
@ -1,68 +0,0 @@
|
|||
// Filename: cgShaderContext.cxx
|
||||
// Created by: sshodhan (20Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "pandabase.h"
|
||||
|
||||
#ifdef HAVE_CG
|
||||
|
||||
#include "cgShaderContext.h"
|
||||
TypeHandle CgShaderContext::_type_handle;
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::init_cg_shader_context
|
||||
// Access: Published
|
||||
// Description: To be overridden by derived class to do appropriate
|
||||
// initialization
|
||||
////////////////////////////////////////////////////////////////////
|
||||
bool CgShaderContext::
|
||||
init_cg_shader_context() {
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::bind
|
||||
// Access: Published
|
||||
// Description: Enable the shaders and actually send parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShaderContext::
|
||||
bind(GraphicsStateGuardianBase *gsg){
|
||||
}
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::unbind
|
||||
// Access: Published
|
||||
// Description: Disable the shaders and texture parameters if any
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShaderContext::
|
||||
un_bind() {
|
||||
}
|
||||
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Function: CgShaderContext::set_param
|
||||
// Access: Published
|
||||
// Description: Overloaded version to set Matrix parameters
|
||||
////////////////////////////////////////////////////////////////////
|
||||
void CgShaderContext::
|
||||
set_param(const string &pname, CgShader::Matrix_Type m, CgShader::Transform_Type t,
|
||||
bool vert_or_frag) {
|
||||
}
|
||||
|
||||
#endif // HAVE_CG
|
||||
|
|
@ -1,128 +0,0 @@
|
|||
// Filename: cgShaderContext.h
|
||||
// Created by: sshodhan (20Jul04)
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
//
|
||||
// PANDA 3D SOFTWARE
|
||||
// Copyright (c) 2001 - 2004, Disney Enterprises, Inc. All rights reserved
|
||||
//
|
||||
// All use of this software is subject to the terms of the Panda 3d
|
||||
// Software license. You should have received a copy of this license
|
||||
// along with this source code; you will also find a current copy of
|
||||
// the license at http://etc.cmu.edu/panda3d/docs/license/ .
|
||||
//
|
||||
// To contact the maintainers of this program write to
|
||||
// panda3d-general@lists.sourceforge.net .
|
||||
//
|
||||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#ifndef CGSHADERCONTEXT_H
|
||||
#define CGSHADERCONTEXT_H
|
||||
|
||||
#include "pandabase.h"
|
||||
|
||||
#ifdef HAVE_CG
|
||||
|
||||
#include "cgShader.h"
|
||||
#include "luse.h"
|
||||
#include "pmap.h"
|
||||
#include "texture.h"
|
||||
#include "dcast.h"
|
||||
#include "pointerTo.h"
|
||||
#include "typedReferenceCount.h"
|
||||
#include <Cg/cgGL.h>
|
||||
|
||||
////////////////////////////////////////////////////////////////////
|
||||
// Class : CgShaderContext
|
||||
// Description : This is a base class to be derived by GLCgShaderContext
|
||||
// DX9CgShaderContext and DX8CgShaderContext
|
||||
// The CgShaderContexts will handle all the
|
||||
// DX/GL API specific shader calls
|
||||
// The CgShader object will do all the API generic stuff
|
||||
// The CgShaderAttrib will be made with a CgShader object
|
||||
// The gsgs will map CgShader objects to CgShaderContext
|
||||
// objects. The CgShader objects will be passed through
|
||||
// the CgShaderAttrib objects and will contain parameter
|
||||
// info.
|
||||
////////////////////////////////////////////////////////////////////
|
||||
class EXPCL_PANDAFX CgShaderContext: public TypedReferenceCount {
|
||||
|
||||
PUBLISHED:
|
||||
|
||||
|
||||
INLINE CgShaderContext(PT(CgShader) cg_shader);
|
||||
|
||||
public:
|
||||
|
||||
// Overloaded functions to do cgGLSetParameter* on various kinds of parameters
|
||||
INLINE virtual void set_param(const string &pname, const float value,
|
||||
bool vert_or_frag);
|
||||
|
||||
INLINE virtual void set_param(const string &pname, const double value,
|
||||
bool vert_or_frag);
|
||||
|
||||
INLINE virtual void set_param(const string &pname, const float value1,
|
||||
const float value2, bool vert_or_frag);
|
||||
|
||||
INLINE virtual void set_param(const string &pname, const double value1,
|
||||
const double value2, bool vert_or_frag);
|
||||
|
||||
INLINE virtual void set_param(const string &pname, const float value1,
|
||||
const float value2, const float value3, bool vert_or_frag);
|
||||
|
||||
INLINE virtual void set_param(const string &pname, const double value1,
|
||||
const double value2, const double value3, bool vert_or_frag);
|
||||
|
||||
INLINE virtual void set_param(const string &pname, const float value1,
|
||||
const float value2, const float value3, const float value4,
|
||||
bool vert_or_frag);
|
||||
|
||||
INLINE virtual void set_param(const string &pname, const double value1,
|
||||
const double value2, const double value3, const double value4,
|
||||
bool vert_or_frag);
|
||||
|
||||
INLINE virtual void set_param(const string &pname, Texture *t, bool vert_or_frag, GraphicsStateGuardianBase *gsg);
|
||||
|
||||
virtual void set_param(const string &pname, CgShader::Matrix_Type m,
|
||||
CgShader::Transform_Type t, bool vert_or_frag);
|
||||
|
||||
|
||||
INLINE virtual void enable_texture_param(const string &pname, bool vert_or_frag);
|
||||
|
||||
INLINE virtual void disable_texture_param(const string &pname, bool vert_or_frag);
|
||||
|
||||
// Bind and unbind shaders and call the set_param functions
|
||||
// based on the CgShader object
|
||||
INLINE virtual void bind(GraphicsStateGuardianBase *gsg);
|
||||
INLINE virtual void un_bind();
|
||||
|
||||
virtual bool init_cg_shader_context();
|
||||
|
||||
// Store a pointer to the CgShader object which contains all the parameter info
|
||||
PT(CgShader) _cg_shader;
|
||||
|
||||
public:
|
||||
static TypeHandle get_class_type() {
|
||||
return _type_handle;
|
||||
}
|
||||
static void init_type() {
|
||||
TypedReferenceCount::init_type();
|
||||
register_type(_type_handle, "CgShaderContext",
|
||||
TypedReferenceCount::get_class_type());
|
||||
}
|
||||
virtual TypeHandle get_type() const {
|
||||
return get_class_type();
|
||||
}
|
||||
virtual TypeHandle force_init_type() {init_type(); return get_class_type();}
|
||||
|
||||
private:
|
||||
static TypeHandle _type_handle;
|
||||
};
|
||||
|
||||
#include "cgShaderContext.I"
|
||||
|
||||
#endif // HAVE_CG
|
||||
|
||||
#endif
|
||||
|
||||
|
||||
|
|
@ -17,13 +17,8 @@
|
|||
////////////////////////////////////////////////////////////////////
|
||||
|
||||
#include "config_effects.h"
|
||||
#include "cgShader.h"
|
||||
#include "cgShaderAttrib.h"
|
||||
#include "cgShaderContext.h"
|
||||
#include "lensFlareNode.h"
|
||||
#include "pandaSystem.h"
|
||||
|
||||
|
||||
#include "dconfig.h"
|
||||
|
||||
Configure(config_effects);
|
||||
|
|
@ -43,14 +38,6 @@ ConfigureFn(config_effects) {
|
|||
////////////////////////////////////////////////////////////////////
|
||||
void
|
||||
init_libeffects() {
|
||||
#ifdef HAVE_CG
|
||||
CgShader::init_type();
|
||||
CgShaderAttrib::init_type();
|
||||
CgShaderContext::init_type();
|
||||
|
||||
PandaSystem *ps = PandaSystem::get_global_ptr();
|
||||
ps->add_system("Cg");
|
||||
#endif
|
||||
#if 0 // temporarily disabled until we can port to new scene graph.
|
||||
LensFlareNode::init_type();
|
||||
LensFlareNode::register_with_read_factory();
|
||||
|
|
|
|||
|
|
@ -1,7 +1,4 @@
|
|||
|
||||
#include "config_effects.cxx"
|
||||
#include "cgShader.cxx"
|
||||
#include "cgShaderAttrib.cxx"
|
||||
#include "cgShaderContext.cxx"
|
||||
#include "lensFlareNode.cxx"
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue