Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2008.11.30;
Скачать: CL | DM;

Вниз

Ошибка в GL программе   Найти похожие ветки 

 
GLProg   (2007-04-06 21:30) [0]

Скажите где здесь ошибка.
При компиляции ничего не появлется только прозрачное окно.  

program prog;

uses
 Windows,
 Messages,
 OpenGL;

var
 h_wnd: HWND;
 h_wc:  TWndClassEx;
 h_dc:  HDC;
 h_rc:  HGLRC;
 msg :  TMsg;

procedure Draw();
begin
 glClearColor(1.0, 0.0, 0.0, 0.0); // Set the Background colour of or scene
 glLoadIdentity();                 // Load a "clean" model matrix on the stack
 glClear(GL_COLOR_BUFFER_BIT);     // Clear the colour buffer

 glTranslatef(0.0,0.0,-3.0);       // Move the scene back by 3 units (Will be explained in a later Chapter)

 glColor3f(1.0, 1.0, 1.0);         // Set the colour of the objects that will be dawn later
 glOrtho(-1.0, 1.0, -1.0, 1.0, -1.0, 1.0);
 glBegin(GL_POLYGON);              // begin drawing a polygon (Many pointed/ sided shape)
   glVertex2f(-0.5, -0.5);         // Draw a point (Two Dimentional Vertex)
   glVertex2f(-0.5, 0.5);
   glVertex2f(0.5, 0.5);
   glVertex2f(0.5, -0.5);
 glEnd();                          // End the shape

end;

procedure Init;
begin
//  glClear(GL_COLOR_BUFFER_BIT);
 glClearColor(1.0,1.0,1.0,1.0);
end;

procedure Resize(Width, Height : Integer);
begin
 glViewport(0, 0, Width, Height);    // Set the viewport for the OpenGL window
 glMatrixMode(GL_PROJECTION);        // Change Matrix Mode to Projection
 glLoadIdentity();                   // Reset View
 gluPerspective(45.0, Width/Height, 1.0, 100.0);  // Do the perspective calculations. Last value = max clipping depth

 glMatrixMode(GL_MODELVIEW);         // Return to the modelview matrix
 glLoadIdentity();                   // Reset View
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{ Главная процедура обработки сообщений                                        }
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
function WndProc(hwnd: HWND; msg: integer; wparam: WPARAM; lparam: LPARAM):LResult; stdcall;
begin
 case msg of
   WM_CREATE:  begin end;
   WM_DESTROY: begin PostQuitMessage(0); Result := 0; end;
   WM_SIZE:    begin Resize(LOWORD(wparam), HIWORD(lparam)) end;
 else
   Result := DefWindowProc(hwnd, msg, wparam, lparam);
 end;
end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{ Процедура создаёт окно и инициализирует OpenGL                               }
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure CreateAPP(name: PChar; width, height: integer);
var
 pfd: TPixelFormatDescriptor;
 nPixelFormat: Integer;
begin
 // Заполнить структуру h_wc нулями
 FillChar(h_wc, SizeOf(h_wc), 0);
 // Установка основных параметров класса
 h_wc.cbSize := SizeOf(h_wc);
 h_wc.style  := CS_OWNDC or CS_VREDRAW or CS_HREDRAW;  // позволяет перерисовывывать окно
 h_wc.lpfnWndProc := @WndProc;                         // указатель на процедуру обработки сообщений
 h_wc.hInstance    := HInstance;                       // экземпляр приложения
 h_wc.lpszMenuName := nil;                             // отсутствие меню (nil)
 h_wc.hCursor      := LoadCursor(0, IDC_ARROW);        // устанавливаем стандартный курсор
//  h_wc.hbrBackground := COLOR_BTNFACE+1;                // цвет окна
 h_wc.lpszClassName := "OpenGL";                       // имя класса
 // Регистрация класса окна в системе
 WINDOWS.RegisterClassEx(h_wc);
 // Создаётся окно
 h_wnd :=  CreateWindowEx(WS_EX_APPWINDOW or       // Top level window
                WS_EX_WINDOWEDGE, "OpenGL", name,
   WS_OVERLAPPEDWINDOW or     // Creates an overlapping window
              WS_CLIPCHILDREN or         // Doesn"t draw within child windows
              WS_CLIPSIBLINGS, 0, 0, width, height, 0, 0,
   Hinstance, nil);

 h_dc := GetDC(h_wnd);

 with pfd do
 begin
   nSize := SizeOf(TPixelFormatDescriptor); // размер структуры
   nVersion := 1;                            // номер версии
   dwFlags := PFD_DOUBLEBUFFER or PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL; // множество битовых флагов, определяющих устройство и интерфейс
   iPixelType := PFD_TYPE_RGBA; // режим для изображения цветов
   cColorBits := 32;            // число битовых плоскостей в каждом буфере цвета
   cRedBits := 0;               // число битовых плоскостей красного в каждом буфере RGBA
   cRedShift := 0;              // смещение от начала числа битовых плоскостей красного в каждом буфере RGBA
   cGreenBits := 0;             // число битовых плоскостей зелёного в каждом буфере RGBA
   cGreenShift := 0;            // смещение от начала числа битовых плоскостей зелёного в каждом буфере RGBA
   cBlueBits := 0;              // число битовых плоскостей синего в каждом буфере RGBA
   cBlueShift := 0;             // смещение от начала числа битовых плоскостей синего в каждом буфере RGBA
   cAlphaBits := 0;             // число битовых плоскостей альфа в каждом буфере RGBA
   cAlphaShift := 0;            // смещение от начала числа битовых плоскостей альфа в каждом буфере RGBA
   cAccumBits := 0;             // общее число битовых плоскостей в буфере аккумулятора
   cAccumRedBits := 0;          // число битовых плоскостей красного в буфере аккумулятора
   cAccumGreenBits := 0;        // число битовых плоскостей зелёного в буфере аккумулятора
   cAccumBlueBits := 0;         // число битовых плоскостей синего в буфере аккумулятора
   cAccumAlphaBits := 0;        // число битовых плоскостей альфа в буфере аккумулятора
   cDepthBits := 32;            // размер буфера глубины (ось z)
   cStencilBits := 0;           // размер буфера трафарета
   cAuxBuffers := 0;            // число вспомогательных буферов
   iLayerType := PFD_MAIN_PLANE;// тип плоскости
   bReserved := 0;              // число плоскостей переднего и заднего плана
   dwLayerMask := 0;            // игнорируется
   dwVisibleMask := 0;          // индекс или цвет прозрачности нижней плоскости
   dwDamageMask := 0;           // игнорируется
 end;

 nPixelFormat := ChoosePixelFormat( H_DC, @pfd ); // запрос системе - поддерживается ли выбранный формат пикселей
 SetPixelFormat( H_DC, nPixelFormat, @pfd );      // устанавливаем формат пикселей в контексте устройства

 h_rc := wglCreateContext(h_dc);
 wglMakeCurrent(h_dc, h_rc);

 // Отображается окно
 ShowWindow(h_wnd, SW_SHOW);
 SetForegroundWindow(h_Wnd);
 SetFocus(h_Wnd);
 Resize(width,height);
 Init;

end;

{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
{ Главный цикл сообщений                                                       }
{~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
procedure Loop;
begin
 while GetMessage(msg, 0, 0, 0) do
 begin
   TranslateMessage(msg);   // переводит сообщения клавиатуры в символьный тип
   DispatchMessage(msg);    // посылает сообщения процедуре обработки сообщений
 end;
 Draw();
 SwapBuffers(h_dc);
end;

begin
 CreateAPP("Semple1",800,600);
 Loop;
end.


 
XProger ©   (2007-04-07 02:28) [1]

В логике...
procedure Loop;
begin
while GetMessage(msg, 0, 0, 0) do // цикл до прихода WM_QUIT
begin
  TranslateMessage(msg);   // переводит сообщения клавиатуры в символьный тип
  DispatchMessage(msg);    // посылает сообщения процедуре обработки сообщений
end;
Draw();
SwapBuffers(h_dc);
end;



Страницы: 1 вся ветка

Текущий архив: 2008.11.30;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.011 c
4-1200752240
RU-mata
2008-01-19 17:17
2008.11.30
Как отключить "память" мыши?


8-1188299704
Арт
2007-08-28 15:15
2008.11.30
векторное изображение и работа с ним...


3-1210659316
Михаил (Питер)
2008-05-13 10:15
2008.11.30
PostgreSQL


15-1222600425
Кое кто
2008-09-28 15:13
2008.11.30
Купил игру


15-1222744713
Maxer123
2008-09-30 07:18
2008.11.30
Urban Kraftway K23