Стандартный пример FASM - не работает?

Тема в разделе "WASM.OpenGL", создана пользователем ruextra, 11 дек 2010.

  1. ruextra

    ruextra New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2009
    Сообщения:
    14
    Вот, в комплекте с фасм идет пример на ОпенГЛ...
    Но, когда пытаюсь изменить положение плоскости по оси Z, плоскость исчезает, а не удаляется(в делфи аналог этой проги работает как часы)....
    Подскажите где что?
    Код (ASM):
    1. ; OpenGL programming example
    2. format PE GUI 4.0
    3. entry start
    4. include '..//include/win32a.inc'
    5. include 'opengl.inc'
    6. section '.text' code readable executable
    7.   start:
    8.         invoke  GetModuleHandle,0
    9.         mov     [wc.hInstance],eax
    10.         invoke  LoadIcon,0,IDI_APPLICATION
    11.         mov     [wc.hIcon],eax
    12.         invoke  LoadCursor,0,IDC_ARROW
    13.         mov     [wc.hCursor],eax
    14.         invoke  RegisterClass,wc
    15.         invoke  CreateWindowEx,0,_class,_title,WS_VISIBLE+WS_OVERLAPPEDWINDOW+WS_CLIPCHILDREN+WS_CLIPSIBLINGS,16,16,432,432,NULL,NULL,[wc.hInstance],NULL
    16.         mov     [hwnd],eax
    17.   msg_loop:
    18.         invoke  GetMessage,msg,NULL,0,0
    19.         or      eax,eax
    20.         jz      end_loop
    21.         invoke  TranslateMessage,msg
    22.         invoke  DispatchMessage,msg
    23.         jmp     msg_loop
    24.   end_loop:
    25.         invoke  ExitProcess,[msg.wParam]
    26.  
    27. proc WindowProc hwnd,wmsg,wparam,lparam
    28.         push    ebx esi edi
    29.         cmp     [wmsg],WM_CREATE
    30.         je      .wmcreate
    31.         cmp     [wmsg],WM_SIZE
    32.         je      .wmsize
    33.         cmp     [wmsg],WM_PAINT
    34.         je      .wmpaint
    35.         cmp     [wmsg],WM_KEYDOWN
    36.         je      .wmkeydown
    37.         cmp     [wmsg],WM_DESTROY
    38.         je      .wmdestroy
    39.   .defwndproc:
    40.         invoke  DefWindowProc,[hwnd],[wmsg],[wparam],[lparam]
    41.         jmp     .finish
    42.   .wmcreate:
    43.         invoke  GetDC,[hwnd]
    44.         mov     [hdc],eax
    45.         mov     edi,pfd
    46.         mov     ecx,sizeof.PIXELFORMATDESCRIPTOR shr 2
    47.         xor     eax,eax
    48.         rep     stosd
    49.         mov     [pfd.nSize],sizeof.PIXELFORMATDESCRIPTOR
    50.         mov     [pfd.nVersion],1
    51.         mov     [pfd.dwFlags],PFD_SUPPORT_OPENGL+PFD_DOUBLEBUFFER+PFD_DRAW_TO_WINDOW
    52.         mov     [pfd.iLayerType],PFD_MAIN_PLANE
    53.         mov     [pfd.iPixelType],PFD_TYPE_RGBA
    54.         mov     [pfd.cColorBits],16
    55.         mov     [pfd.cDepthBits],16
    56.         mov     [pfd.cAccumBits],0
    57.         mov     [pfd.cStencilBits],0
    58.         invoke  ChoosePixelFormat,[hdc],pfd
    59.         invoke  SetPixelFormat,[hdc],eax,pfd
    60.         invoke  wglCreateContext,[hdc]
    61.         mov     [hrc],eax
    62.         invoke  wglMakeCurrent,[hdc],[hrc]
    63.         invoke  GetClientRect,[hwnd],rc
    64.         invoke  glViewport,0,0,[rc.right],[rc.bottom]
    65.         invoke  GetTickCount
    66.         mov     [clock],eax
    67.         xor     eax,eax
    68.         jmp     .finish
    69.   .wmsize:
    70.         invoke  GetClientRect,[hwnd],rc
    71.         invoke  glViewport,0,0,[rc.right],[rc.bottom]
    72.         xor     eax,eax
    73.         jmp     .finish
    74.   .wmpaint:
    75.         invoke  GetTickCount
    76.         sub     eax,[clock]
    77.         cmp     eax,10
    78.         jb      .animation_ok
    79.         add     [clock],eax
    80.         invoke  glRotatef,[theta],0.0,0.0,1.0
    81.       .animation_ok:
    82.         invoke  glClear,GL_COLOR_BUFFER_BIT
    83.         invoke  glBegin,GL_QUADS
    84.         invoke  glColor3f,1.0,0.1,0.1
    85.         invoke  glVertex3f,-0.6,-0.6,0.0
    86.         invoke  glColor3f,0.1,0.1,0.1
    87.         invoke  glVertex3f,0.6,-0.6,0.0
    88.         invoke  glColor3f,0.1,0.1,1.0
    89.         invoke  glVertex3f,0.6,0.6,0.0
    90.         invoke  glColor3f,1.0,0.1,1.0
    91.         invoke  glVertex3f,-0.6,0.6,0.0
    92.         invoke  glEnd
    93.         invoke  SwapBuffers,[hdc]
    94.         xor     eax,eax
    95.         jmp     .finish
    96.   .wmkeydown:
    97.         cmp     [wparam],VK_ESCAPE
    98.         jne     .defwndproc
    99.   .wmdestroy:
    100.         invoke  wglMakeCurrent,0,0
    101.         invoke  wglDeleteContext,[hrc]
    102.         invoke  ReleaseDC,[hwnd],[hdc]
    103.         invoke  PostQuitMessage,0
    104.         xor     eax,eax
    105.   .finish:
    106.         pop     edi esi ebx
    107.         ret
    108. endp
    109. section '.data' data readable writeable
    110.   _title db 'OpenGL example',0
    111.   _class db 'FASMOPENGL32',0
    112.   theta GLfloat 0.6
    113.   wc WNDCLASS 0,WindowProc,0,0,NULL,NULL,NULL,NULL,NULL,_class
    114.   hwnd dd ?
    115.   hdc dd ?
    116.   hrc dd ?
    117.   msg MSG
    118.   rc RECT
    119.   pfd PIXELFORMATDESCRIPTOR
    120.   clock dd ?
     
  2. ruextra

    ruextra New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2009
    Сообщения:
    14
    Таблицу экспорта функций не стал вписывать думаю все понятно....
     
  3. ruextra

    ruextra New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2009
    Сообщения:
    14
    glTranslatef(); - не работает по Z ну никак...
     
  4. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    А где в приведённом листинге glTranslatef? И да, тут не хватает gluPerspective.
     
  5. ruextra

    ruextra New Member

    Публикаций:
    0
    Регистрация:
    23 дек 2009
    Сообщения:
    14
    Кароче, где функция glRotatef(), если ее заменить glTranslatef(), сразу лагает....
    Ну че никто не знает???????????
     
  6. FatMoon

    FatMoon New Member

    Публикаций:
    0
    Регистрация:
    28 ноя 2002
    Сообщения:
    954
    Адрес:
    Russia
    ruextra
    Телепаты в отпуске. Приведи код с glTranslatef. Навскидку:

    у glRotate 4 аргумента, а у glTranslatef всего 3. Если просто заменить, то сразу слагает, не вопрос. Стек съедет.

    glTranslate изменяет масштаб. Если она стоит вместо glRotate, то вызывается каждые 10 мс. то есть 100 раз в секунду! И через секунду твой квадратик или сжимается, или расширяется так, что не видно ничего. Ну это если ты там коэфиценты масштабирования такие указал...
     
  7. iZzz32

    iZzz32 Sergey Sfeli

    Публикаций:
    0
    Регистрация:
    3 сен 2006
    Сообщения:
    355
    FatMoon, да там проекция не настроена. В GL_PROJECTION_MATRIX identity лежит.