📄 vertexprogram.cpp
字号:
// VertexProgram.cpp: implementation of the VertexProgram class.
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "shadow.h"
#include "extgl.h"
#include "VertexProgram.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
////////////////////////////////////////////////////////////////////////////////////////////////////
// This is the actual vertex program. For more information on what these instructions do
// refere to NVIDIA's website. There are numberous Docs on this specification.
//////////////////////////////////
///////Latest Date: 2003/10/22
///////Youquan Liu
///////Use this class to manage the whole vertex shader
////Vertex Shader in NV
void LoadVertexNVProgramFromFile(char *ShaderFile, unsigned int &ShaderID)
{
FILE *fp;
if((fp = fopen(ShaderFile,"rb")) == NULL)
{
CString Msg;
Msg.Format("Error to read in the Vertex Program file <%s>",ShaderFile);
AfxMessageBox(Msg);
return;
}
fseek(fp, 0, SEEK_END);
int stringLength = ftell(fp);
fseek(fp, 0, SEEK_SET);
unsigned char* stringShader = new unsigned char[stringLength + 1];
fread(stringShader, 1, stringLength, fp);
stringShader[stringLength] = '\0';
fclose(fp);
glEnable(GL_VERTEX_PROGRAM_NV);
glGenProgramsNV(1, &ShaderID);
glBindProgramNV(GL_VERTEX_PROGRAM_NV, ShaderID);
glLoadProgramNV(GL_VERTEX_PROGRAM_NV, ShaderID, stringLength, stringShader);
if(GL_INVALID_OPERATION == glGetError())
{
// Find the error position
GLint errPos;
glGetIntegerv( GL_PROGRAM_ERROR_POSITION_ARB, &errPos );
// Print implementation-dependent program
// errors and warnings string.
unsigned char *errString = (unsigned char*)glGetString(GL_PROGRAM_ERROR_STRING_ARB);
CString Msg;
Msg.Format("When Loading Vertex Program <%s>, Error at position: %d\nError Content:\n %s\n",ShaderFile, errPos, errString);
AfxMessageBox(Msg);
return;
}
delete[] stringShader;
stringShader = NULL;
return;
}
////Vertex Shader in ARB
/////Load in the shader string from a file to define the whole vertex program
void LoadVertexARBProgramFromFile(char *ShaderFile, unsigned int &ShaderID)
{
FILE *fp;
if((fp = fopen(ShaderFile,"rb")) == NULL)
{
CString Msg;
Msg.Format("Error to read in the Vertex Program file <%s>",ShaderFile);
AfxMessageBox(Msg);
return;
}
fseek(fp, 0, SEEK_END);
int stringLength = ftell(fp);
fseek(fp, 0, SEEK_SET);
unsigned char* stringShader = new unsigned char[stringLength + 1];
fread(stringShader, 1, stringLength, fp);
stringShader[stringLength] = '\0';
fclose(fp);
glEnable(GL_VERTEX_PROGRAM_ARB);
glGenProgramsARB(1, &ShaderID);
glBindProgramARB(GL_VERTEX_PROGRAM_ARB, ShaderID);
glProgramStringARB(GL_VERTEX_PROGRAM_ARB, GL_PROGRAM_FORMAT_ASCII_ARB, stringLength, stringShader);
if(GL_INVALID_OPERATION == glGetError())
{
// Find the error position
GLint errPos;
glGetIntegerv( GL_PROGRAM_ERROR_POSITION_ARB, &errPos );
// Print implementation-dependent program
// errors and warnings string.
unsigned char *errString = (unsigned char*)glGetString(GL_PROGRAM_ERROR_STRING_ARB);
CString Msg;
Msg.Format("Vertex Program error at position: %d\nError Content:%s\n",errPos, errString);
AfxMessageBox(Msg);
return;
}
delete[] stringShader;
stringShader = NULL;
return;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -