OpenGL буферизует две инициализации - PullRequest
2 голосов
/ 15 января 2012

Мой проект состоит из двух инициализаций: одна инициализация предназначена для пользовательского интерфейса (меню и кнопки), а другая - для отображения изображений (растровые изображения), все они написаны с использованием openGL. Теперь, где глюк, когда я его собираю, complier не сообщает о каких-либо ошибках, но в моем приложении отсутствует картинка, т. Е. Он не показывает ее, однако мой пользовательский интерфейс openGl показывает объекты.

Прежде всего, как вы видите, я добавил текстурные координаты к вершинам полигонов, к которым я хотел применить текстуру, затем применяется инициализация текстуры, плюс ее интеграция, поэтому я не вижу где он застрял. В чем проблема? И возможно ли, чтобы компилятор обрабатывал интеграцию объектов в этой форме, то есть можно ли буферизовать две инициализации с использованием разных интеграций?

/*
 * Method InitUI() used for initialization of the user interface
 *
 */
 void InitUI()
 {
myInterfaceSetDefaultStyle ( MYINTERFACESTYLE_SMALL_SHADED ) ;
myInterfaceSetDefaultColourScheme( 0.5f, 0.7f, 0.9f );

MenuFunctionA();
    ButtonFUnctionA();
 }


 /*
  * Method onDraw is used for integration of the cotures of the object itself
  *
  */

  void OnDraw() {

glClear(GL_DEPTH_BUFFER_BIT|GL_COLOR_BUFFER_BIT);

glLoadIdentity();

// binds the texture to any geometry about to be rendered
glBindTexture(GL_TEXTURE_2D,g_Texture);

// whenever you apply a texture to an object, you will need
// to specify texture co-ordinates which define the placement
// of the texture on the polygons. Changing the value of the
// tex coords changes the placement of the texture...
//
glBegin(GL_QUADS);
    glTexCoord2f(0,0);
    glVertex2f(-15,15);

    glTexCoord2f(0,1);
    glVertex2f(-15,-15);

    glTexCoord2f(1,1);
    glVertex2f(15,-15);

    glTexCoord2f(1,0);
    glVertex2f(15,15);
glEnd();

glutSwapBuffers();
 }

 /*
  * Method Display() used for making up of the user interface.
  *
  */
  void Display()
  {

    glClear(GL_COLOR_BUFFER_BIT);

/* display the user interface */

    myInterfaceDisplay();


    glutSwapBuffers();
  }

  /*
   * Method OnInit() used for initialization of the texture bitmap
   */

   void OnInit() {

// enable the depth test and 2D texturing
glEnable(GL_DEPTH_TEST);
glEnable(GL_TEXTURE_2D);

// load texture as compressed
g_Texture = LoadTexture("texture.bmp");

// outputs the size of the texture
    // I used this method just to test if this function is integrated at all, and suprisingly it is, however no picture is displayed, even though I specifically stated it in this function 
std::cout << "Texture Size=" << (GetTextureSize(g_Texture)/1024.0f) << "Kb"<<                std::endl;
  }


/* 
* Method Init() used for custom OpenGL initialization ( background of the application )
*/
   void Init()
{
glClearColor(0.5f,0.5f,0.5f,0.5f);
}

/* 
 * Method main used for integration and initialization of all the components involved  in building the application
*/ 
int main(int argc,char** argv)
{
glutInit(&argc,argv);
glutInitDisplayMode(GLUT_RGB|GLUT_DOUBLE);
glutInitWindowSize(640,480);
glutInitWindowPosition(300,100);
glutCreateWindow(" OpenGL Double buffering ");

glutDisplayFunc(Display);
glutDisplayFunc(onDraw);
glutMouseFunc(MouseButton);
glutMotionFunc(MouseMove);
glutKeyboardFunc(KeyBoard);
glutSpecialFunc(SpecialKeyBoard);

myInterfaceInit();
Init();
InitUI();
    onInit();

glutMainLoop();

}

Ответы [ 2 ]

2 голосов
/ 15 января 2012

Двойной буфер используется для отображения одного «изображения» перед рендерингом второго. Затем поменяйте их местами и визуализируйте первый.

Я бы сделал это в одном обратном вызове для перенасыщения (glutDisplay не поддерживает несколько обратных вызовов), например:

void Display() {
    glLoadIdentity();
    DrawOne();
    DrawOther();
    glutSwapBuffers();
}
2 голосов
/ 15 января 2012

Вы можете зарегистрировать только один обратный вызов за один раз с GLUT.Если вы хотите вызвать несколько функций, сделайте это через прокси-функцию.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...