Я пишу программу для окон, используя c++
, opengl 2.1
и SDL
, и у меня возникают некоторые проблемы с цветами вершин.
Я использую glColor3f
для установки цветадля каждого набора вершин, но, кажется, не работает.Я получаю каждую вершину красным, независимо от того, какой цвет я выбираю.Я проверил значения, передаваемые в glColor3f
, и они действительно не 1.f, 0.f, 0.f ...
Кто-нибудь когда-либо сталкивался с такой проблемой, или знает, что может быть ее причиной?Может быть, я не включаю какую-то библиотеку, я должен?Или вы считаете, что это может быть какая-то проблема с кодом инициализации SDL (это не должно быть, как я раньше использовал правильно)?
EDIT4: решено .. это действительно проблема с GPU, яЯ получил драйверы от производителя, и теперь он работает правильно ... перейдите к рисунку
РЕДАКТИРОВАТЬ: Я также не использую освещение, текстуры или что-то в этом роде.Графически я просто настроил окно и сказал opengl некоторые вершины и цвета для рисования ..
EDIT2: Конечно, но я сильно сомневаюсь, что есть какая-то проблема:, довольно стандартная штука .. c хранит значения между 0.0-1.0.Я просто попытался запустить какую-то другую работу, которую я проделал с OpenGL, и все также отображается красным (этого не было раньше), поэтому я предполагаю, что это как-то связано с библиотеками, которые я использую:
opengl32.lib
sdl.lib
sdlmain.lib
glu32.lib
SDL - версия 1.2.14.Кроме того, это может быть проблема с моим GPU?Все остальное отображается с обычными цветами ... веб-браузер, видео, игры и т. Д.
EDIT3: код инициализации SDL:
int done = 0;
int w = 800;
int h = 600;
GLenum gl_error;
char* sdl_error;
SDL_Event event;
Init_OpenGL(argc, argv, w, h); // start window and OpenGL
SDL_WM_SetCaption( "MySlinky", "" ); /* Set the window manager title bar */
void Init_OpenGL(int argc, char* argv[], int w, int h)
{
int rgb_size[3];
int bpp = 0;
Uint32 video_flags = SDL_OPENGL;
if( SDL_Init( SDL_INIT_VIDEO ) < 0 ) {
fprintf(stderr,"Couldn't initialize SDL: %s\n",SDL_GetError());
exit( 1 );
}
/* See if we should detect the display depth */
if ( bpp == 0 ) {
if ( SDL_GetVideoInfo()->vfmt->BitsPerPixel <= 8 ) {
bpp = 8;
} else {
bpp = 16; /* More doesn't seem to work */
}
}
/* Initialize the display */
switch (bpp) {
case 8:
rgb_size[0] = 3;
rgb_size[1] = 3;
rgb_size[2] = 2;
break;
case 15:
case 16:
rgb_size[0] = 5;
rgb_size[1] = 5;
rgb_size[2] = 5;
break;
default:
rgb_size[0] = 8;
rgb_size[1] = 8;
rgb_size[2] = 8;
break;
}
SDL_GL_SetAttribute( SDL_GL_RED_SIZE, rgb_size[0] ); // Sets bits per channel
SDL_GL_SetAttribute( SDL_GL_GREEN_SIZE, rgb_size[1] );
SDL_GL_SetAttribute( SDL_GL_BLUE_SIZE, rgb_size[2] );
SDL_GL_SetAttribute( SDL_GL_DEPTH_SIZE, 24 ); // 3 channels per pixel (R, G and B)
SDL_GL_SetAttribute( SDL_GL_DOUBLEBUFFER, 1 );
SDL_GL_SetAttribute( SDL_GL_ACCELERATED_VISUAL, 1 );
if ( SDL_SetVideoMode( w, h, bpp, video_flags ) == NULL ) {
fprintf(stderr, "Couldn't set GL mode: %s\n", SDL_GetError());
SDL_Quit();
exit(1);
}
}