Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Проблемы с OpenGL [Delphi, Windows]


Страницы:   1 2 3

HARIER ©   (2007-05-25 20:43:00) 

Почему дёргается экран. Когда передвигаю мышку или нажимаю любую клавишу.
Такое творится только при разрешении 1024 х 768.
Почему? Внизу код.

===================== Unit =================================

interface

uses
 Windows,
 Messages,
 OpenGL,
 ANSORO_UTILITS;

const
 ENGINE_NAME = 'HARIER';
 ENGINE_VERSION = '0.1';

type
 TOnRender = procedure;
 TOnUpdate = procedure;
 TOnInit = procedure;

type
 TEngine = class
   h_Msg : TMSG;
   h_Wnd : hWnd;
   h_wc:  TWndClassEX;
   h_DC : HDC;
   h_RC: HGLRC;
   PFD: TPixelFormatDescriptor;
   nPFD: integer;
 private
   FOnRender: TOnRender;
   FOnUpdate: TOnUpdate;
   FOnInit  : TOnInit;
 public
   constructor Create;
   destructor  Destroy;
 public
 // SYSTEM
   procedure Init(name: PChar; width, height: integer; bpp: byte; FullScreen: Boolean = false);
   procedure SetFullScreen(width, height: integer; bpp: byte);
   procedure Quit;
   procedure Loop;
 // OPENGL
   procedure InitGL;
   procedure SetPFD;

   property OnRender: TOnRender read FOnRender write FOnRender;
   property OnUpdate: TOnUpdate read FOnUpdate write FOnupdate;
   property OnInit: TOnInit read FOnInit write FOnInit;
 private
   eFullScreen: boolean;
   eWidth,eHeight: integer;
   eBpp: Byte;
   eFinished: Boolean;
 end;

procedure InitEngine;

var
 engine: TEngine;

implementation

procedure InitEngine;
begin
 engine := TEngine.Create;
end;

constructor TEngine.Create;
begin
 eFinished := false;
end;

function WndProc(h_wnd:hWND; events: Integer; wparam: wparam; lparam: lparam):lresult;stdcall;
begin
 case events of
   WM_CREATE:  begin  end;
   WM_DESTROY: begin PostQuitMessage(0); Result:= 0; exit; end;
   WM_PAINT:   begin
               glClear(GL_DEPTH_BUFFER_BIT OR GL_COLOR_BUFFER_BIT);
               glClearColor(0,1,0,0);
              // ValidateRect(h_wnd,nil); result := 0; exit;
             end;

 end;
 Result := DefWindowProc(h_wnd, events, wparam, lparam);
end;

procedure TEngine.SetPFD;
begin
 FillChar(pfd, sizeof(pfd), 0);
 pfd.nVersion := 1;
 pfd.nSize := sizeof(pfd);
 pfd.dwFlags := PFD_DOUBLEBUFFER or PFD_DRAW_TO_WINDOW or PFD_SUPPORT_OPENGL;
 pfd.iPixelType := PFD_TYPE_RGBA;
 pfd.cColorBits := eBpp;
 pfd.cStencilBits := 0;
 pfd.cDepthBits   := 32;
 nPFD := ChoosePixelFormat(h_dc, @pfd);
 SetPixelFormat( H_DC, nPFD, @pfd );
end;

procedure TEngine.InitGL;
begin
 SetPFD;
 h_rc := wglCreateContext(h_dc);
 wglMakeCurrent(h_dc, h_rc);
 glClear(GL_DEPTH_BUFFER_BIT OR GL_COLOR_BUFFER_BIT);
 glClearColor(0,1,0,0);
end;

procedure TEngine.SetFullScreen(width: Integer; height: Integer; bpp: Byte);
var
 dm: DevMode;
 hr: HRESULT;
 DC: hdc;
begin
 FillChar(dm, SizeOf(dm),0);
 dm.dmSize := SizeOf(DevMode);
 dm.dmFields := DM_PELSWIDTH OR DM_PELSHEIGHT OR DM_BITSPERPEL OR DM_DISPLAYFREQUENCY;
 dm.dmPelsWidth := width;
 dm.dmPelsHeight:= height;
 dm.dmBitsPerPel := bpp;
 dm.dmDisplayFrequency := 75;
 HR :=  ChangeDisplaySettings(dm, CDS_FULLSCREEN);
end;

procedure TEngine.Init(name: PChar; width: Integer; height: Integer; bpp: Byte; FullScreen: Boolean = False);
var
 dwExStyle : DWord;
 dwStyle   : DWord;
begin
 eWidth := width;
 eHeight:= height;
 eBpp   := bpp;

 ZeroMemory(@h_wc,SizeOf(h_wc));
 h_wc.style        := CS_HREDRAW OR CS_VREDRAW OR CS_OWNDC;
 h_wc.cbSize       := sizeof(h_wc);
 h_wc.lpfnWndProc  := @WndProc;
 h_wc.hInstance    := hInstance;
 h_wc.hbrBackground:= COLOR_BTNFACE+1;
 h_wc.hCursor      := LoadCursor(0,IDC_ARROW);
 h_wc.lpszClassName:= ENGINE_NAME;

 WINDOWS.RegisterClassEx(h_wc);

 if FullScreen then
 begin
   eFullScreen := true;
   dwExStyle   := WS_OVERLAPPED or WS_EX_TOPMOST;   // поверх всех окон
   dwStyle     := WS_POPUP OR WS_CLIPCHILDREN OR WS_CLIPSIBLINGS;
   SetFullScreen(width,height,bpp);
 end
 else
 begin
   eFullScreen := false;
   dwExStyle   := WS_OVERLAPPED or WS_EX_TOPMOST;   // поверх всех окон
   dwStyle     := WS_SYSMENU OR WS_MINIMIZEBOX OR WS_CLIPCHILDREN OR WS_CLIPSIBLINGS;
 end;

 h_wnd := CreateWindowEX(dwExStyle,ENGINE_NAME,name,dwStyle,0,0,Width,Height,0,0,hInstance ,nil);
 h_dc  := GetDC(h_wnd);

 InitGL;

 ShowWindow(h_wnd,SW_SHOW);
 SetForegroundWindow(h_Wnd);

end;

procedure TEngine.Loop;
begin
 while GetMessage(h_msg,0,0,0) do
 begin
   DispatchMessage(h_msg);
   TranslateMessage(h_msg);
    SwapBuffers(h_dc);
 end;
 
end;

procedure TEngine.Quit;
begin
 eFinished := true;
end;

destructor TEngine.Destroy;
begin

 Quit;

 DestroyWindow(h_wnd);
 UnRegisterClass(ENGINE_NAME,hInstance);

 wglDeleteContext(h_rc);
 ReleaseDC(h_wnd,h_dc);

 wglMakeCurrent(0, 0);
 wglDeleteContext(h_RC);
 ReleaseDC(h_Wnd, h_DC);

 if eFullscreen then ChangeDisplaySettings(TDevMode(nil^), CDS_FULLSCREEN);

end;

===================== Application =================================
program APP;

uses
 Windows,
 OpenGL,
 ENGINE in 'ANSORO_ENGINE.pas',
 UTILITS in 'ANSORO_UTILITS.pas';

begin
 InitEngine;
 engine.Init('APP',1024,768,32,true);
 engine.Loop;
end.


HARIER   (2007-05-27 03:08:00) [21]



 // Settings for the OpenGL window
 with pfd do
 begin
   nSize           := SizeOf(TPIXELFORMATDESCRIPTOR); // Size Of This Pixel Format Descriptor
   nVersion        := 1;                    // The version of this data structure
   dwFlags         := PFD_DRAW_TO_WINDOW    // Buffer supports drawing to window
                      or PFD_SUPPORT_OPENGL // Buffer supports OpenGL drawing
                      or PFD_DOUBLEBUFFER;  // Supports double buffering
   iPixelType      := PFD_TYPE_RGBA;        // RGBA color format
   cColorBits      := BPP;           // OpenGL color depth
   cRedBits        := 0;                    // Number of red bitplanes
   cRedShift       := 0;                    // Shift count for red bitplanes
   cGreenBits      := 0;                    // Number of green bitplanes
   cGreenShift     := 0;                    // Shift count for green bitplanes
   cBlueBits       := 0;                    // Number of blue bitplanes
   cBlueShift      := 0;                    // Shift count for blue bitplanes
   cAlphaBits      := 0;                    // Not supported
   cAlphaShift     := 0;                    // Not supported
   cAccumBits      := 0;                    // No accumulation buffer
   cAccumRedBits   := 0;                    // Number of red bits in a-buffer
   cAccumGreenBits := 0;                    // Number of green bits in a-buffer
   cAccumBlueBits  := 0;                    // Number of blue bits in a-buffer
   cAccumAlphaBits := 0;                    // Number of alpha bits in a-buffer
   cDepthBits      := 16;                   // Specifies the depth of the depth buffer
   cStencilBits    := 0;                    // Turn off stencil buffer
   cAuxBuffers     := 0;                    // Not supported
   iLayerType      := PFD_MAIN_PLANE;       // Ignored
   bReserved       := 0;                    // Number of overlay and underlay planes
   dwLayerMask     := 0;                    // Ignored
   dwVisibleMask   := 0;                    // Transparent color of underlay plane
   dwDamageMask    := 0;                     // Ignored
 end;

 // Attempts to find the pixel format supported by a device context that is the best match to a given pixel format specification.
 PixelFormat := ChoosePixelFormat(h_DC, @pfd);
 if (PixelFormat = 0) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to find a suitable pixel format', 'Error', MB_OK or MB_ICONERROR);
   Exit;
 end;

 // Sets the specified device context's pixel format to the format specified by the PixelFormat.
 if (not SetPixelFormat(h_DC, PixelFormat, @pfd)) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to set the pixel format', 'Error', MB_OK or MB_ICONERROR);
   Exit;
 end;

 // Create a OpenGL rendering context
 h_RC := wglCreateContext(h_DC);
 if (h_RC = 0) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to create an OpenGL rendering context', 'Error', MB_OK or MB_ICONERROR);
   Exit;
 end;

 // Makes the specified OpenGL rendering context the calling thread's current rendering context
 if (not wglMakeCurrent(h_DC, h_RC)) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to activate OpenGL rendering context', 'Error', MB_OK or MB_ICONERROR);
   Exit;
 end;

 // Settings to ensure that the window is the topmost window
 ShowWindow(h_Wnd, SW_SHOW);
 SetForegroundWindow(h_Wnd);
 SetFocus(h_Wnd);

 // Ensure the OpenGL window is resized properly
 glResizeWnd(Width, Height);
 glInit(); // Initialise any OpenGL States and variables
end;

procedure TEngine.Loop;
begin

 while GetMessage(h_msg, 0,0,0) do

     begin                               // Else translate and dispatch the message to this window
      TranslateMessage(h_msg);
       DispatchMessage(h_msg);
     end;

end;

procedure TEngine.Quit;
begin
 eFinished := true;
end;

destructor TEngine.Destroy;
begin
  glKillWnd(eFullscreen);
end;

end.


HARIER   (2007-05-27 03:05:00) [22]


procedure TEngine.glKillWnd(Fullscreen : Boolean);
begin
 if Fullscreen then             // Change back to non fullscreen
 begin
   ChangeDisplaySettings(devmode(nil^), 0);
   ShowCursor(True);
 end;

 // Makes current rendering context not current, and releases the device
 // context that is used by the rendering context.
 if (not wglMakeCurrent(h_DC, 0)) then
   MessageBox(0, 'Release of DC and RC failed!', 'Error', MB_OK or MB_ICONERROR);

 // Attempts to delete the rendering context
 if (not wglDeleteContext(h_rc)) then
 begin
   MessageBox(0, 'Release of rendering context failed!', 'Error', MB_OK or MB_ICONERROR);
   h_RC:= 0;
 end;

 // Attemps to release the device context
 if ((h_DC > 0) and (ReleaseDC(h_Wnd, h_DC) = 0)) then
 begin
   MessageBox(0, 'Release of device context failed!', 'Error', MB_OK or MB_ICONERROR);
   h_DC := 0;
 end;

 // Attempts to destroy the window
 if ((h_Wnd <> 0) and (not DestroyWindow(h_Wnd))) then
 begin
   MessageBox(0, 'Unable to destroy window!', 'Error', MB_OK or MB_ICONERROR);
   h_Wnd := 0;
 end;

 // Attempts to unregister the window class
 if (not UnRegisterClass(ENGINE_NAME, hInstance)) then
 begin
   MessageBox(0, 'Unable to unregister window class!', 'Error', MB_OK or MB_ICONERROR);
   hInstance := 0;
 end;
end;

////////////////////////////////////////////////////////////////////////////////
///                         Public unit function
////////////////////////////////////////////////////////////////////////////////

procedure TEngine.InitEngine(name: PAnsiChar; width: Integer; height: Integer; bpp: Integer; FullScreen: Boolean = False);
var
dwStyle : DWORD;              // Window styles
 dwExStyle : DWORD;            // Extended window styles
 dmScreenSettings : DEVMODE;   // Screen settings (fullscreen, etc...)
 PixelFormat : GLuint;         // Settings for the OpenGL rendering
//  h_Instance : HINST;           // Current instance
 pfd : TPIXELFORMATDESCRIPTOR;  // Settings for the OpenGL window
begin
// h_Instance := GetModuleHandle(nil);       //Grab An Instance For Our Window
 ZeroMemory(@h_wc, SizeOf(h_wC));  // Clear the window class structure

 with h_wc do                    // Set up the window class
 begin
   style         := CS_HREDRAW or    // Redraws entire window if length changes
                    CS_VREDRAW or    // Redraws entire window if height changes
                    CS_OWNDC;        // Unique device context for the window
   lpfnWndProc   := @WndProc;        // Set the window procedure to our func WndProc
//    hInstance     := h_Instance;
   hCursor       := LoadCursor(0, IDC_ARROW);
   lpszClassName := ENGINE_NAME;
 end;
RegisterClassEX(h_wc);

 eFullScreen :=  FullScreen;

 // Change to fullscreen if so desired
 if Fullscreen then
 begin
   ZeroMemory(@dmScreenSettings, SizeOf(dmScreenSettings));
   with dmScreenSettings do begin              // Set parameters for the screen setting
     dmSize       := SizeOf(dmScreenSettings);
     dmPelsWidth  := Width;                    // Window width
     dmPelsHeight := Height;                   // Window height
     dmBitsPerPel := bpp;               // Window color depth
     dmFields     := DM_PELSWIDTH or DM_PELSHEIGHT or DM_BITSPERPEL;
   end;

   // Try to change screen mode to fullscreen
   if (ChangeDisplaySettings(dmScreenSettings, CDS_FULLSCREEN) = DISP_CHANGE_FAILED) then
   begin
     MessageBox(0, 'Unable to switch to fullscreen!', 'Error', MB_OK or MB_ICONERROR);
     Fullscreen := False;
   end;
 end;

 // If we are still in fullscreen then
 if (Fullscreen) then
 begin
   dwStyle := WS_POPUP or                // Creates a popup window
              WS_CLIPCHILDREN            // Doesn't draw within child windows
              or WS_CLIPSIBLINGS;        // Doesn't draw within sibling windows
   dwExStyle := WS_EX_APPWINDOW;         // Top level window
   ShowCursor(False);                    // Turn of the cursor (gets in the way)
 end
 else
 begin
   dwStyle := WS_OVERLAPPEDWINDOW or     // Creates an overlapping window
              WS_CLIPCHILDREN or         // Doesn't draw within child windows
              WS_CLIPSIBLINGS;           // Doesn't draw within sibling windows
   dwExStyle := WS_EX_APPWINDOW or       // Top level window
                WS_EX_WINDOWEDGE;        // Border with a raised edge
 end;

 // Attempt to create the actual window
 h_Wnd := CreateWindowEx(dwExStyle,      // Extended window styles
                         ENGINE_NAME,       // Class name
                         NAME,      // Window title (caption)
                         dwStyle,        // Window styles
                         0, 0,           // Window position
                         Width, Height,  // Size of window
                         0,              // No parent window
                         0                          ,              // No menu
                         hInstance,     // Instance
                         nil);           // Pass nothing to WM_CREATE
 if h_Wnd = 0 then
 begin
   glKillWnd(Fullscreen);                // Undo all the settings we've changed
   MessageBox(0, 'Unable to create window!', 'Error', MB_OK or MB_ICONERROR);
   Exit;
 end;

 // Try to get a device context
 h_DC := GetDC(h_Wnd);
 if (h_DC = 0) then
 begin
   glKillWnd(Fullscreen);
   MessageBox(0, 'Unable to get a device context!', 'Error', MB_OK or MB_ICONERROR);
   Exit;
 end;


HARIER   (2007-05-27 03:00:00) [23]

Мучался весь день. И ни чего не получилось.
Мне нужно написать модуль который создаёт окно и контекст.
Первый пример я делал по книге. Своими мозгами. А второй по
исходникам с Sulaco. И что получилось выдаются ошибки:
Невозможно создать класс, создать окно ....
У меня уже голова не варит. Как нужно правильно сделать.
Получается что своими мозгами заработало но с глюками, а
метом Копировать Вставить вообще не работает.

Я думаю вы уже много раз писали подобное :-)
Помогите пожалуйста...


unit ENGINE;

interface

uses
 Windows,
 Messages,
 OpenGL,
 UTILITS;

const
 ENGINE_NAME = 'ANSORO';
 ENGINE_VERSION = '1.0';

type
 TOnRender = procedure;
 TOnUpdate = procedure;
 TOnInit = procedure;

{    FOnRender: TOnRender;
   FOnUpdate: TOnUpdate;
   FOnInit  : TOnInit;
}

{
   property OnRender: TOnRender read FOnRender write FOnRender;
   property OnUpdate: TOnUpdate read FOnUpdate write FOnupdate;
   property OnInit: TOnInit read FOnInit write FOnInit;
}
ENG = ^Tengine;
TEngine = class
  h_wnd: HWND;
  h_msg: TMsg;
  h_wc:  TWndClassEX;
  h_dc:  HDC;
  h_rc:  HGLRC;

  eFullScreen: Boolean;
  eWidth,
  eHeight: Integer;
public
  procedure InitEngine(name: PChar; width, height: integer; bpp: integer; FullScreen: Boolean = false);
  procedure Loop;
  procedure Quit;

  procedure glInit;
  procedure glKillWnd(Fullscreen : Boolean);
private
  constructor Create;
  destructor  Destroy;
end;

procedure EngineInit;

var
 engine: TEngine;

 eFinished: Boolean;

implementation

procedure EngineInit;
begin
 engine := TEngine.Create;
end;

constructor TEngine.Create;
begin
 eFinished := false;
end;

////////////////////////////////////////////////////////////////////////////////
///                         Private unit function
////////////////////////////////////////////////////////////////////////////////

procedure TEngine.glInit;
begin
 glClearColor(0.0, 0.0, 0.0, 0.0);     // Black Background
end;

procedure glResizeWnd(Width, Height : Integer);
begin
 // This Function will be handled in a later chapter

 if (Height = 0) then                // prevent divide by zero exception
   Height := 1;
 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: UINT;  wParam: WPARAM;  lParam: LPARAM): LRESULT; stdcall;
begin
 case (Msg) of
   WM_CREATE:
     begin
//        eFinished := false;
     end;
   WM_CLOSE:
     begin
       PostQuitMessage(0);
       Result := 0
     end;
   WM_KEYDOWN:       // Set the pressed key (wparam) to equal true so we can check if its pressed
     begin
//        keys[wParam] := True;
       Result := 0;
     end;
   WM_KEYUP:         // Set the released key (wparam) to equal false so we can check if its pressed
     begin
//        keys[wParam] := False;
       Result := 0;
     end;
   WM_SIZE:          // Resize the window with the new width and height
     begin
       glResizeWnd(LOWORD(lParam),HIWORD(lParam));
       Result := 0;
     end;
   else
     Result := DefWindowProc(hWnd, Msg, wParam, lParam);    // Default result if nothing happens
 end;
end;


Rial   (2007-05-26 21:19:00) [24]

> [11] ElectriC ©   (26.05.07 17:18)
> ИМХО, лучше так:
> >var
> >  GL_WindowInit : packed record             // Window Creation
> Info
> >   application:  PApplication;        // Application Structure
> >   title:        PAnsiChar;           // Window Title
> >   width:        Integer;             // Width
> >   height:       Integer;             // Height
> >   bitsPerPixel: Integer;             // Bits Per Pixel
> >   isFullScreen: Boolean;             // FullScreen?
> > end;

Конкретно в данном случае вставка слова "packed" не играет
никакой роли. Почему? - можно почитать о правилах выравнивания полей.
Конечно, когда составляешь свою структуру записи, лучше
сразу выбирать такой порядок полей, чтобы размер записи был
минимальным.
А необходимоть в "packed" в основном возникает при переносе
кода с других языков.


> [17] @!!ex ©   (26.05.07 20:26)
> НЕ играешь чтоли совсем? :))

Нет...


@!!ex   (2007-05-26 20:26:00) [25]

> У меня стоит разрешение 1024*768, частота обновление 75Гц...
> если какая то программа принудительно меняет его- это
> 80% шанс отправиться в корзину ежеминутно.

Практически любая игра меняет разрешение...
НЕ играешь чтоли совсем? :))


Rial   (2007-05-26 20:23:00) [26]

> [14] HARIER   (26.05.07 20:04)
> Что лучше делать класс движка или запись?

В начале нужно сделать что угодно, работающее без сбоев
и глюков. А вообще, запись - это метод представления данных,
а класс - это нечто большее.
С одной стороны, для отладки проще обойтись записями,
потом все это завернуть в красивую обертку, обеспечивающую
целостность данных.
Возможно, наступит такой момент, когда классы в итоге будут
ощутимо замедлять работу... но это маловероятно.


> [5] HARIER   (26.05.07 00:31)
> Rial ©   (25.05.07 22:53) [2]
> Объясни что ты имел ввиду. Я чегото непонял :-)

У меня стоит разрешение 1024*768, частота обновление 75Гц...
если какая то программа принудительно меняет его- это
80% шанс отправиться в корзину ежеминутно.


ElectriC   (2007-05-26 20:20:00) [27]


> А вообще Записи не нужно ни конструктора ни деструтора.

Нет.

> Что лучше делать класс движка или запись?

Ну я б лучше делал запись => быстрее и экономнее ;)))


HARIER   (2007-05-26 20:04:00) [28]

А вообще Записи не нужно ни конструктора ни деструтора.
Может біть она всётаки лучше.
Что лучше делать класс движка или запись?


ElectriC   (2007-05-26 19:55:00) [29]


> Почему запаковынный рекорд луычше? Медленней же работает.

Ну поставь обычный)))


@!!ex   (2007-05-26 18:30:00) [30]

Почему запаковынный рекорд луычше? Медленней же работает.


ElectriC   (2007-05-26 17:18:00) [31]

ИМХО, лучше так:

>var
>  GL_WindowInit : packed record             // Window Creation Info
>   application:  PApplication;        // Application Structure
>   title:        PAnsiChar;           // Window Title
>   width:        Integer;             // Width
>   height:       Integer;             // Height
>   bitsPerPixel: Integer;             // Bits Per Pixel
>   isFullScreen: Boolean;             // FullScreen?
> end;


@!!ex   (2007-05-26 17:12:00) [32]

нафиг класс?


HARIER   (2007-05-26 17:03:00) [33]

Вообще я думаю что то я всётаки на портачил так пробовал исходники
с сайта Sulaco . Его исходники идут нормально.

Еще вопрос. Что лучше использовать.

 PGL_WindowInit = ^TGL_WindowInit;
 TGL_WindowInit = record              // Window Creation Info
   application:  PApplication;        // Application Structure
   title:        PAnsiChar;           // Window Title
   width:        Integer;             // Width
   height:       Integer;             // Height
   bitsPerPixel: Integer;             // Bits Per Pixel
   isFullScreen: Boolean;             // FullScreen?
 end;  

или

 TGL_WindowInit = class              // Window Creation Info
   application:  PApplication;        // Application Structure
   title:        PAnsiChar;           // Window Title
   width:        Integer;             // Width
   height:       Integer;             // Height
   bitsPerPixel: Integer;             // Bits Per Pixel
   isFullScreen: Boolean;             // FullScreen?
 end;


HARIER   (2007-05-26 10:28:00) [34]

А где я могу его выложить?


@!!ex   (2007-05-26 09:46:00) [35]

Может быть косяки видеокарты.
ПРишли ехешник, мы потестим на своих машинах.


Домик   (2007-05-26 02:11:00) [36]

> Rial ©   (25.05.07 22:53) [2]

У меня, к примеру, разрешение рабочего стола 1600x1200. Не каждая 3D игра будет производительна в таком разрешение, а 2D игрушки даже таких разрешений, как правило, не знают...


HARIER   (2007-05-26 00:31:00) [37]

Rial ©   (25.05.07 22:53) [2]

Объясни что ты имел ввиду. Я чегото непонял :-)


HARIER   (2007-05-26 00:28:00) [38]

убрал частоту не помогло.
Я двигаю мышку и тогда начинает перерисоваться экран .
Странно. Серый потом зелёный. если не двигаю мышку то нормально.
Такое только в полноекранном режиме.


homm   (2007-05-25 23:09:00) [39]

> [2] Rial ©

+1
Конечно, если не даеться выбор разрешений по вкусу :)


Rial   (2007-05-25 22:53:00) [40]

Зачем вообще принудительно менять разрешение ?..
Если что то уже настроено, значит пользователю
так удобно :)


Страницы:   1 2 3

Наверх

Титульная страница Поиск, карта сайта Написать письмо