* Problems with OpenGL asm program.
@ 2005-08-12 17:00 Lauri Pihlajakangas
2005-08-12 19:31 ` Frank Kotler
0 siblings, 1 reply; 3+ messages in thread
From: Lauri Pihlajakangas @ 2005-08-12 17:00 UTC (permalink / raw)
To: linux-assembly
Hello. I am learning x86 linux assembly and OpenGL.
I've translated a C-written example from NeHe into my own NASM syntax
asm program.
Problem is that it doesn't work, i've been debugging it for eight
hours now. I think the
problem is in InitGL routine, the gluPerspective() call. Below is part
of gluPerspective() manpage.
NAME
gluPerspective - set up a perspective projection matrix
C SPECIFICATION
void gluPerspective( GLdouble fovy,
GLdouble aspect,
GLdouble zNear,
GLdouble zFar )
And..
/usr/include/GL/gl.h:150:typedef double GLdouble; /*
double precision float */
Ok, so i translated the gluPerspective(45.0f,1.0f,0.1f,100.0f); C call
into assembly. The code for it is below:
finit
sub esp,8
fild qword [d_100.0]
fstp qword [esp]
sub esp,8
fild qword [d_0.1]
fstp qword [esp]
fild dword [esp+20] ;width
fild dword [esp+24] ;height
sub esp,8
fdiv st1, st0
fstp qword [esp] ; BUG?
sub esp,8
fild qword [d_45.0]
fstp qword [esp]
call gluPerspective
add esp, 32
I suspect i didn't get this right. I'd greatly appreciate if someone
finds something funny in it. The program runs on my computer fine, and
i'm able to quit it with pressing ESC, but it just wont draw the quad.
Please report if you find anything obivously wrong in this code,
please. :)
;----gl.inc-------
%define GL_LESS 0201h
%define GL_DEPTH_TEST 0B71h
%define GL_SMOOTH 1D01h
%define GL_PROJECTION 1701h
%define GL_MODELVIEW 1700h
%define GL_POLYGON 0009h
%define GL_LINE_STRIP 0003h
%define GL_QUADS 0007h
%define GL_TRIANGLES 0004h
%define GL_COLOR_BUFFER_BIT 00004000h
%define GL_DEPTH_BUFFER_BIT 00000100h
EXTERN glClear, glClearColor, glClearDepth
EXTERN glColor3f
EXTERN glDepthFunc
EXTERN glEnable
EXTERN glShadeModel
EXTERN glMatrixMode
EXTERN glLoadIdentity
EXTERN glTranslatef
EXTERN glViewport
EXTERN glBegin
EXTERN glEnd
EXTERN glVertex3f
;--- END gl.inc
; --- glut.inc ----------
%define GLUT_RGBA 0000h
%define GLUT_DOUBLE 0002h
%define GLUT_ALPHA 0008h
%define GLUT_DEPTH 0010h
EXTERN glutSwapBuffers
EXTERN glutInit, glutInitWindowSize, glutInitWindowPosition
EXTERN glutInitDisplayMode
EXTERN glutCreateWindow
EXTERN glutDisplayFunc, glutIdleFunc, glutKeyboardFunc
EXTERN glutMainLoop
EXTERN glutDestroyWindow
EXTERN glutFullScreen
EXTERN glViewport
; --- END glut.inc
;---------------------------#
;OGL asm stuff by lpk. 2005.#
;---------------------------#
;nasm -felf test.asm
;ld -lglut -lGL -I/lib/ld-linux.so.2 test.o -e main
%include "gl.inc"
%include "glut.inc"
%define ESCAPE 27
GLOBAL main
EXTERN exit
EXTERN usleep
EXTERN gluPerspective
SECTION .data USE32
title db "Pure NASM syntax assembly linked into C libraries..",0
p_0.0 dd 0.0
p_1.0 dd 1.0
p_45.0 dd 45.0
p_0.1 dd 0.1
p_100.0 dd 100.0
p_3.0 dd 3.0
p_0.5 dd 0.5
n_1.0 dd -1.0
n_1.5 dd -1.5
n_6.0 dd -6.0
d_100.0 dq 100.0
d_0.1 dq 0.1
d_45.0 dq 45.0
;------------------------- Code Section ---
SECTION .text USE32
InitGL: ;--(int Width, int Height)
sub esp,32
fldz
fst qword [esp]
fst qword [esp]
fst qword [esp]
fstp qword [esp]
call glClearColor
add esp, 32
fld1
sub esp,8
fstp qword [esp]
call glClearDepth
add esp, 8
push GL_LESS
call glDepthFunc
add esp,4
push GL_DEPTH_TEST
call glEnable
add esp,4
push GL_SMOOTH
call glShadeModel
add esp,4
push GL_PROJECTION
call glMatrixMode
add esp,4
call glLoadIdentity
finit
sub esp,8
fild qword [d_100.0]
fstp qword [esp]
sub esp,8
fild qword [d_0.1]
fstp qword [esp]
fild dword [esp+20] ;width
fild dword [esp+24] ;height
sub esp,8
fdiv st1, st0
fstp qword [esp] ; BUG?
sub esp,8
fild qword [d_45.0]
fstp qword [esp]
call gluPerspective
add esp, 32
push GL_MODELVIEW
call glMatrixMode
add esp,4
ret
DrawGLScene:
push GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT
call glClear
add esp,4
call glLoadIdentity
push dword [n_6.0]
push dword [p_0.0]
push dword [n_1.5]
call glTranslatef
add esp,12
push GL_QUADS
call glBegin
add esp,4
push dword [p_0.0]
push dword [p_1.0]
push dword [n_1.0]
call glVertex3f
add esp,12
push dword [p_0.0]
push dword [p_1.0]
push dword [p_1.0]
call glVertex3f
add esp,12
push dword [p_0.0]
push dword [n_1.0]
push dword [p_1.0]
call glVertex3f
add esp,12
push dword [p_0.0]
push dword [n_1.0]
push dword [n_1.0]
call glVertex3f
add esp,12
call glEnd
call glutSwapBuffers
ret
keyPressed: ;--(unsigned char key, int x, int y)
push 100
call usleep
add esp,4
cmp dword [esp+4],ESCAPE
jnz .escapeFalse
;escape is true
push dword [window]
call glutDestroyWindow
add esp,4
push 0
call exit
.escapeFalse
ret
main:
mov eax, [esp+4]
mov ecx, [esp+8]
mov [argc],eax
mov [argv],ecx
push dword [esp+8]
push argc
call glutInit
add esp,8
push GLUT_RGBA|GLUT_DOUBLE|GLUT_ALPHA|GLUT_DEPTH
call glutInitDisplayMode
add esp,4
push 480
push 640
call glutInitWindowSize
add esp,8
push 0
push 0
call glutInitWindowPosition
add esp,8
push title
call glutCreateWindow
mov [window],eax
add esp,4
push DrawGLScene
call glutDisplayFunc
call glutFullScreen
call glutIdleFunc
add esp,4
push keyPressed
call glutKeyboardFunc
add esp,4
push 480
push 640
call InitGL
add esp,8
call glutMainLoop
ret 1
; ------ end of main
;------------------ Uninitialized Section ---
SECTION .bss
argc: resd 1
argv: resd 1
fpu_tmp resq 1
window: resd 1
^ permalink raw reply [flat|nested] 3+ messages in thread* Re: Problems with OpenGL asm program.
2005-08-12 17:00 Problems with OpenGL asm program Lauri Pihlajakangas
@ 2005-08-12 19:31 ` Frank Kotler
2005-08-13 10:01 ` Lauri Pihlajakangas
0 siblings, 1 reply; 3+ messages in thread
From: Frank Kotler @ 2005-08-12 19:31 UTC (permalink / raw)
To: Lauri Pihlajakangas; +Cc: linux-assembly
Lauri Pihlajakangas wrote:
...
> fild dword [esp+20] ;width
> fild dword [esp+24] ;height
> sub esp,8
> fdiv st1, st0
> fstp qword [esp] ; BUG?
Looks like the "result" is in st1, and you store st0? Perhaps try "fdivp"?
...
> sub esp,32
> fldz
> fst qword [esp]
> fst qword [esp]
> fst qword [esp]
> fstp qword [esp]
> call glClearColor
> add esp, 32
Here, you seem to be storing the result in the same place 4 times.
Probably want "fst qword [esp]"/"fst qword [esp + 8]"/"fst qword [esp +
16]", etc. ???
...
> fild dword [esp+20] ;width
> fild dword [esp+24] ;height
> sub esp,8
> fdiv st1, st0
> fstp qword [esp] ; BUG?
As above...
I don't have a clue about GL, but those look "suspicious" to me... Hope
it helps.
Best,
Frank
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2005-08-13 10:01 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-08-12 17:00 Problems with OpenGL asm program Lauri Pihlajakangas
2005-08-12 19:31 ` Frank Kotler
2005-08-13 10:01 ` Lauri Pihlajakangas
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).