在OGL上使用CG

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.
 
  
    //
    // 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;
    }
  再为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]
 创建CG的CONTEXT( 设备上下文)
[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 );
 g_CGprogram_pixel = cgCreateProgramFromFile( g_CGcontext,
                   CG_SOURCE,
                   "pixel_shader.cg",
                   g_CGprofile_pixel,
                   NULL,
                   NULL );
[/code]
 cgCreateProgramFromFile 的倒数地二个参数指明了CG函数的入口函数
 填NULL说明入口函数默认是 main()
 读入程序,哈哈!
 [code]
 //
 // Load the programs using Cg's expanded interface...
 //
 cgGLLoadProgram( g_CGprogram_vertex );
 cgGLLoadProgram( g_CGprogram_pixel );
[/code]
 如果有需要还要传递些外部变量给CG语言, 可以这样
[code]
 g_CGparam_testTexture   = cgGetNamedParameter(g_CGprogram_pixel, "testTexture");
[/code]
testTexture 是在C++环境中出现的参数的名字
我们可以为参数设置值
[code]
 cgGLSetParameter4fv(testTexture, value);
[/code]
5.程序结束时,需要shutdown()函数
程序很简单,直接贴出来.
[code]
                cgDestroyProgram(g_CGprogram_vertex);
 cgDestroyProgram(g_CGprogram_pixel);
 cgDestroyContext(g_CGcontext);
[/code]
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值