1.在VC环境下, 在LINK中加入 cg.lib cgGL.lib 两个库
2.在程序的开头加入
#include <Cg/Cg.h>
#include <Cg/cgGL.h>
3.加入几个关于CG的全局变量
CGprofile g_CGprofile_vertex; //表示VERTEX SHADER的PROFILE.
CGprofile g_CGprofile_pixel; //表示PIXEL SHADER的PROFILE
CGcontext g_CGcontext; //CG环境的设备上下文
CGprogram g_CGprogram_vertex; //VERTEX SHADER的CG程序
CGprogram g_CGprogram_pixel; //PIXEL SHADER的CG程序
4.我们需要初试化CG,我们需要写个初始化函数 initCG()
首先找到VERTEX SHADER一个有效的PROFILE.
2.在程序的开头加入
#include <Cg/Cg.h>
#include <Cg/cgGL.h>
3.加入几个关于CG的全局变量
CGprofile g_CGprofile_vertex; //表示VERTEX SHADER的PROFILE.
CGprofile g_CGprofile_pixel; //表示PIXEL SHADER的PROFILE
CGcontext g_CGcontext; //CG环境的设备上下文
CGprogram g_CGprogram_vertex; //VERTEX SHADER的CG程序
CGprogram g_CGprogram_pixel; //PIXEL SHADER的CG程序
4.我们需要初试化CG,我们需要写个初始化函数 initCG()
首先找到VERTEX SHADER一个有效的PROFILE.
//
// Search for a valid vertex shader profile in this order:
//
// CG_PROFILE_ARBVP1 - GL_ARB_vertex_program
// CG_PROFILE_VP40 - GL_ARB_vertex_program + GL_NV_vertex_program3
//
if( cgGLIsProfileSupported(CG_PROFILE_ARBVP1) )
g_CGprofile_vertex = CG_PROFILE_ARBVP1;
else if( cgGLIsProfileSupported(CG_PROFILE_VP40) )
g_CGprofile_vertex = CG_PROFILE_VP40;
else
{
MessageBox( NULL,"Failed to initialize vertex shader! Hardware doesn't "
"support any of the required vertex shading extensions!",
"ERROR",MB_OK|MB_ICONEXCLAMATION );
return;
}
g_CGprofile_vertex = CG_PROFILE_ARBVP1;
else if( cgGLIsProfileSupported(CG_PROFILE_VP40) )
g_CGprofile_vertex = CG_PROFILE_VP40;
else
{
MessageBox( NULL,"Failed to initialize vertex shader! Hardware doesn't "
"support any of the required vertex shading extensions!",
"ERROR",MB_OK|MB_ICONEXCLAMATION );
return;
}
再为PIXEL SHADER找到一个有效的PROFILE
[code]
//
// Search for a valid pixel shader profile in this order:
//
// CG_PROFILE_ARBFP1 - GL_ARB_fragment_program
// CG_PROFILE_FP30 - GL_NV_fragment_program
// CG_PROFILE_FP20 - NV_texture_shader & NV_register_combiners
//
if( cgGLIsProfileSupported(CG_PROFILE_ARBFP1) )
g_CGprofile_pixel = CG_PROFILE_ARBFP1;
else if( cgGLIsProfileSupported(CG_PROFILE_FP30) )
g_CGprofile_pixel = CG_PROFILE_FP30;
else if( cgGLIsProfileSupported(CG_PROFILE_FP20) )
g_CGprofile_pixel = CG_PROFILE_FP20;
else
{
MessageBox( NULL,"Failed to initialize pixel shader! Hardware doesn't "
"support any of the required pixel shading extensions!",
"ERROR",MB_OK|MB_ICONEXCLAMATION );
return;
}
[/code]
[code]
//
// Search for a valid pixel shader profile in this order:
//
// CG_PROFILE_ARBFP1 - GL_ARB_fragment_program
// CG_PROFILE_FP30 - GL_NV_fragment_program
// CG_PROFILE_FP20 - NV_texture_shader & NV_register_combiners
//
if( cgGLIsProfileSupported(CG_PROFILE_ARBFP1) )
g_CGprofile_pixel = CG_PROFILE_ARBFP1;
else if( cgGLIsProfileSupported(CG_PROFILE_FP30) )
g_CGprofile_pixel = CG_PROFILE_FP30;
else if( cgGLIsProfileSupported(CG_PROFILE_FP20) )
g_CGprofile_pixel = CG_PROFILE_FP20;
else
{
MessageBox( NULL,"Failed to initialize pixel shader! Hardware doesn't "
"support any of the required pixel shading extensions!",
"ERROR",MB_OK|MB_ICONEXCLAMATION );
return;
}
[/code]
创建CG的CONTEXT( 设备上下文)
[code]
// Create the context...
g_CGcontext = cgCreateContext();
[code]
// Create the context...
g_CGcontext = cgCreateContext();
[/code]
创建VERTEX和PIXEL SHADER
[code]
//
// Create the vertex and pixel shader...
//
g_CGprogram_vertex = cgCreateProgramFromFile( g_CGcontext,
CG_SOURCE,
"vertex_shader.cg",
g_CGprofile_vertex,
NULL,
NULL );
[code]
//
// Create the vertex and pixel shader...
//
g_CGprogram_vertex = cgCreateProgramFromFile( g_CGcontext,
CG_SOURCE,
"vertex_shader.cg",
g_CGprofile_vertex,
NULL,
NULL );
g_CGprogram_pixel = cgCreateProgramFromFile( g_CGcontext,
CG_SOURCE,
"pixel_shader.cg",
g_CGprofile_pixel,
NULL,
NULL );
CG_SOURCE,
"pixel_shader.cg",
g_CGprofile_pixel,
NULL,
NULL );
[/code]
cgCreateProgramFromFile 的倒数地二个参数指明了CG函数的入口函数
填NULL说明入口函数默认是 main()
cgCreateProgramFromFile 的倒数地二个参数指明了CG函数的入口函数
填NULL说明入口函数默认是 main()
读入程序,哈哈!
[code]
//
// Load the programs using Cg's expanded interface...
//
[code]
//
// Load the programs using Cg's expanded interface...
//
cgGLLoadProgram( g_CGprogram_vertex );
cgGLLoadProgram( g_CGprogram_pixel );
cgGLLoadProgram( g_CGprogram_pixel );
[/code]
如果有需要还要传递些外部变量给CG语言, 可以这样
[code]
g_CGparam_testTexture = cgGetNamedParameter(g_CGprogram_pixel, "testTexture");
[code]
g_CGparam_testTexture = cgGetNamedParameter(g_CGprogram_pixel, "testTexture");
[/code]
testTexture 是在C++环境中出现的参数的名字
我们可以为参数设置值
[code]
cgGLSetParameter4fv(testTexture, value);
[/code]
我们可以为参数设置值
[code]
cgGLSetParameter4fv(testTexture, value);
[/code]
5.程序结束时,需要shutdown()函数
程序很简单,直接贴出来.
[code]
cgDestroyProgram(g_CGprogram_vertex);
cgDestroyProgram(g_CGprogram_pixel);
cgDestroyContext(g_CGcontext);
[/code]
程序很简单,直接贴出来.
[code]
cgDestroyProgram(g_CGprogram_vertex);
cgDestroyProgram(g_CGprogram_pixel);
cgDestroyContext(g_CGcontext);
[/code]