我对Visual studio和C ++也很陌生。我一直试图通过Ed Angels的交互式计算机图形学自上而下的OpenGL方法获得Sierpinski Gasket示例,特别是第2章示例1 Visual C ++项目,我遇到了一些问题,我似乎无法解决或找到解决方案。我遇到的问题是,当我在VS2012中运行它时,窗口会立即关闭并出现错误,因为它无法找到vshader21.glsl。当我从调试文件夹中的6E Test.exe运行它时,它打开正常,创建一个窗口,但它不显示任何三角形,只是一个空白框。我已经下载了最新版本的GLEW和freeglut,我很肯定我把所有东西放在了正确的位置。
示例项目包括:Angel.h,vec.h,mat.h,CheckError.h,example1.cpp,InitShader.cpp,vshader21.glsl和fshader21.glsl
我认为错误来自example1.cpp,行GLuint program = InitShader(" vshader21.glsl"," fshader21.glsl");找不到文件我已将.glsl添加到debug文件夹,并更改了路径以转到项目属性的工作目录中的debug文件夹。关于如何解决这个问题的任何建议或解决方案?
#include "Angel.h"
const int NumPoints = 5000;
void
init( void )
{
vec2 points[NumPoints];
// Specifiy the vertices for a triangle
vec2 vertices[3] = {
vec2( -1.0, -1.0 ), vec2( 0.0, 1.0 ), vec2( 1.0, -1.0 )
};
// Select an arbitrary initial point inside of the triangle
points[0] = vec2( 0.25, 0.50 );
// compute and store N-1 new points
for ( int i = 1; i < NumPoints; ++i ) {
int j = rand() % 3; // pick a vertex at random
// Compute the point halfway between the selected vertex
// and the previous point
points[i] = ( points[i - 1] + vertices[j] ) / 2.0;
}
// Create a vertex array object
GLuint vao;
glGenVertexArrays( 1, &vao );
glBindVertexArray( vao );
// Create and initialize a buffer object
GLuint buffer;
glGenBuffers( 1, &buffer );
glBindBuffer( GL_ARRAY_BUFFER, buffer );
glBufferData( GL_ARRAY_BUFFER, sizeof(points), points, GL_STATIC_DRAW );
// Load shaders and use the resulting shader program
GLuint program = InitShader( "vshader21.glsl", "fshader21.glsl" );
glUseProgram( program );
// Initialize the vertex position attribute from the vertex shader
GLuint loc = glGetAttribLocation( program, "vPosition" );
glEnableVertexAttribArray( loc );
glVertexAttribPointer( loc, 2, GL_FLOAT, GL_FALSE, 0,
BUFFER_OFFSET(0) );
glClearColor( 1.0, 1.0, 1.0, 1.0 ); // white background
}
void
display( void )
{
glClear( GL_COLOR_BUFFER_BIT ); // clear the window
glDrawArrays( GL_POINTS, 0, NumPoints ); // draw the points
glFlush();
}
void
keyboard( unsigned char key, int x, int y )
{
switch ( key ) {
case 033:
exit( EXIT_SUCCESS );
break;
}
}
int
main( int argc, char **argv )
{
glutInit(&argc, argv);
glutInitDisplayMode( GLUT_RGBA );
glutInitWindowSize( 512, 512 );
// If you are using freeglut, the next two lines will check if
// the code is truly 3.2. Otherwise, comment them out
glutInitContextVersion( 3, 1 );
glutInitContextProfile( GLUT_CORE_PROFILE );
glutCreateWindow( "Sierpinski Gasket" );
glewInit();
init();
glutDisplayFunc( display );
glutKeyboardFunc( keyboard );
glutMainLoop();
return 0;
}
更新这是我按F5运行它时告诉我的内容。 我的GLEW版本是1.10.0,freeglut是2.8.1-1
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Users \ Robert \ Documents \ 6E test \ Debug \ 6E test.exe&#39;。符号已加载。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ ntdll.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ kernel32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ KernelBase.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Users \ Robert \ Documents \ 6E test \ Debug \ freeglut.dll&#39;。模块是在没有符号的情况下构建的。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ user32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ gdi32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ lpk.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ usp10.dll&#39;。无法找到或打开PDB文件。 &#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ msvcrt.dll&#39;。无法找到或打开PDB文件。 &#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ advapi32.dll&#39;。无法找到或打开PDB文件。 &#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ sechost.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ rpcrt4.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ sspicli.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ cryptbase.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ opengl32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ glu32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ ddraw.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ dciman32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ setupapi.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ cfgmgr32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ oleaut32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ ole32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ devobj.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ dwmapi.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ winmm.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Users \ Robert \ Documents \ 6E test \ Debug \ glew32.dll&#39;。模块是在没有符号的情况下构建的。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ msvcp110d.dll&#39;。符号已加载。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ msvcr110d.dll&#39;。符号已加载。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ imm32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ msctf.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ nvinit.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ uxtheme.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ ig7icd32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ version.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已卸载&#39; C:\ Windows \ SysWOW64 \ version.dll&#39;
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ ole32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已卸载&#39; C:\ Windows \ SysWOW64 \ ole32.dll&#39;
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ ole32.dll&#39;。无法找到或打开PDB文件。
&#39; 6E test.exe&#39; (Win32):已卸载&#39; C:\ Windows \ SysWOW64 \ ole32.dll&#39;
&#39; 6E test.exe&#39; (Win32):已加载&#39; C:\ Windows \ SysWOW64 \ clbcatq.dll&#39;。无法找到或打开PDB文件。
程序&#39; [6244] 6E test.exe&#39;已退出代码1(0x1)。
答案 0 :(得分:1)
在较新版本的Microsoft Windows中,您无法使用单缓冲窗口绘图,并且启用了桌面合成。即使您的着色器加载机制正常工作,您也会遇到更大的问题,即输出不可见。事实上根据你的问题描述判断,我认为你已经遇到了这个问题。
请查看this question以获取有关问题和解决方案的更详细说明。