DevilDevil
glClearColor(0.0, 0.0, 0.0, 0.0); glShadeModel( GL_SMOOTH); glDisable( GL_DEPTH_TEST); glDepthFunc( GL_LEQUAL); glDisable( GL_ALPHA_TEST); glClearDepth( 1.0); glEnable( GL_BLEND); glHint( GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST); glBlendFunc( GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA); glEnable( GL_TEXTURE_2D); glDisable( GL_NORMALIZE); glEnable( GL_COLOR_MATERIAL);
Всё это делается в обоих приложениях?
> закомментировал glFlush - ничего не изменилось. На некоторых моих примерах
> давал прирост скорости в пару десятков fps.
> Чё делать ?
SwapBuffers уже делает флуш... А у тебя масло масленное получается...
Executor
самое первое, что начал смотреть - стейты GL
Написал модуль, который логирует текущие стейты. Специально добивался идентичности.
См 0й пост - это содержание log-файла. Идентичны.
Как организован главный цикл в обоих приложениях?
Может выложишь исходники обоих?
Executor
там замудрённый код в обоих случаях.
Давайте я лучше ваш вариант подставлю - и посмотрю. Т.е. ваш рабочий вариант, который точно расчитывает fps и вызывает Render
Я ФПС считаю фрапсом...
bool loop = true; while (loop) { while ( PeekMessage( &msg, NULL, 0, 0, PM_NOREMOVE)) { if ( !GetMessage( &msg, NULL, 0, 0)) { if ( msg.message == WM_QUIT) loop = false; } TranslateMessage( &msg); DispatchMessage( &msg); } Render( ); }
Установил FRAPS, мерию теперь им
procedure Run(); var loop: boolean; msg: TMsg; begin loop := true; while ( loop) do begin while ( PeekMessage( msg, 0, 0, 0, PM_NOREMOVE)) do begin if ( not GetMessage( msg, 0, 0, 0)) then begin if ( msg.message = WM_QUIT) then loop := false; end; TranslateMessage( msg); DispatchMessage( msg); end; Render( ); end; end;
FPS такое же
eXgine-овский пример правильно FpS считает
оконная функция:
function WindowProc(hWnd: HWND; Msg: dword; wParam, lParam: integer): integer; stdcall; begin Result := DefWindowProc( hWnd, Msg, wParam, lParam); exit; end;
procedure Render(); begin SwapBuffers( h_DC); end;
FPS - 160
eXgine - овский пример с очисткой экрана и активизацией текстуры - 300 FPS
Почему SwapBuffers может быть такой медленный ?
DevilDevil
> Почему SwapBuffers может быть такой медленный ?
у тебя vSync случаем не включен?
Phoenics
хочешь сказать у него моник на 160 герц?
DevilDevil
> Почему SwapBuffers может быть такой медленный ?
Значит ты делаешь чтото иначе...
Видеорежим может другой выставляешь... Фулскрин-не фулскрин например...
Много всего может быть, без кода сложно ткнуть пальцем и сказать вот поэтому...
Нифуя!
Я инициализирую графическую систему, когда окно свёрнуто. Стоило мне написать ShowWindow(Window, SW_SHOW) перед инициализацией GL - и всё заработало как должно.
Теперь несколько вопросов. Почему такое? Можно ли добиться нормального эффекта, проинициализировав графическую систему в свёрнутом окне?
DX7 рендер лучше не стал; в чём дело ?
P.S. с DX-рендером уже были перебои: то он в нормальном режиме работал, то с низким FPS. Я списывал на плохую работу драйверов (Intel), но сейчас вижу, что собака зарыта в каком то другом месте. Помогите найти
d.m.k предложил посмотреть TPIXELFORMATDESCRIPTOR после ChoosePixelFormat в обоих случаях. Равны.
В DX7 корни ведут к IDirect3D7.CreateDevice() и создаётся только в Soft-режиме.
Почему он создаётся в Soft-режиме и изредка создаётся в Hard-режиме ?
Возвращает DDERR_OUTOFMEMORY: 'DirectDraw does not have enough memory to perform the operation.'
Чё за херь ?
DevilDevil
> Теперь несколько вопросов. Почему такое? Можно ли добиться нормального эффекта,
> проинициализировав графическую систему в свёрнутом окне?
Эээ... Всмысле в свёрнутом окне?
У меня ShowWindow делается после инициализации ОпенГЛ - на фпс никак не влияет:
InitOpenGL(); ShowWindow( hWnd, SW_SHOWDEFAULT); UpdateWindow( hWnd); SetForegroundWindow( hWnd); SetFocus( hWnd);
Executor
Ничего не понимаю
Принёс проект домой (Athlon 1700xp, GeFource4) - оба варианта GL/DX дают 20 FPS. Не понимаю
Тема в архиве.