completely overhauled models framework... now loads Model, Mesh, Material, and Texture (plus TextureFile) fixed a number of bugs/inflexibilities in gamedata xml parser refactored the various modules to use "init" functions to better control when they get loaded (ie, before or after OpenGL init) which it turns out is *very important*, because if the shaders and textures get loaded before OpenGL does, they don't work. go figure.
134 lines
3 KiB
Python
Executable file
134 lines
3 KiB
Python
Executable file
#!/usr/bin/env python2.4
|
|
|
|
from OpenGL.GL import *
|
|
from OpenGL.GLU import *
|
|
from OpenGL.arrays import GLcharArray
|
|
import pygame
|
|
from pygame.locals import *
|
|
import sys
|
|
import shader
|
|
|
|
height=None
|
|
width=None
|
|
|
|
def enable_vsync():
|
|
if sys.platform != 'darwin':
|
|
return
|
|
try:
|
|
import ctypes
|
|
import ctypes.util
|
|
ogl = ctypes.cdll.LoadLibrary(ctypes.util.find_library("OpenGL"))
|
|
v = ctypes.c_int(1)
|
|
ogl.CGLSetParameter(ogl.CGLGetCurrentContext(), ctypes.c_int(222), ctypes.pointer(v))
|
|
except:
|
|
print "Unable to set vsync mode, using driver defaults"
|
|
def skipping_next_frame():
|
|
return False
|
|
def set_res((width_in, height_in)):
|
|
global height, width
|
|
|
|
height = height_in
|
|
width = width_in
|
|
|
|
if height==0:
|
|
height=1
|
|
if width==0:
|
|
width=1
|
|
#pygame.display.gl_set_attribute(GL_DEPTH_SIZE, 24)
|
|
video_flags = OPENGL|DOUBLEBUF
|
|
#video_flags = OPENGL|DOUBLEBUF|FULLSCREEN
|
|
pygame.display.set_mode((width, height), video_flags)
|
|
|
|
def get_res():
|
|
return (height, width)
|
|
|
|
def get_height():
|
|
return height
|
|
|
|
def get_width():
|
|
return width
|
|
|
|
|
|
def init2d():
|
|
#print pygame.display.gl_get_attribute(GL_DEPTH_SIZE)
|
|
glViewport(0, 0, width, height)
|
|
glMatrixMode(GL_PROJECTION)
|
|
glLoadIdentity()
|
|
glOrtho(-0.5, float(width)-0.5, float(height)-0.5, -0.5, 256.0, -256.0)
|
|
glMatrixMode(GL_MODELVIEW)
|
|
glLoadIdentity()
|
|
#glRotatef(120.0, 1.0, 0.0, 0.0)
|
|
|
|
|
|
glClearColor(0.0, 0.0, 0.0, 0.0)
|
|
glClearDepth(-256.0)
|
|
|
|
glShadeModel(GL_SMOOTH)
|
|
glEnable(GL_DEPTH_TEST)
|
|
glEnable(GL_CULL_FACE)
|
|
glEnable(GL_TEXTURE_2D)
|
|
glDepthFunc(GL_GEQUAL)
|
|
glEnable(GL_BLEND)
|
|
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
|
|
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (0.3, 0.3, 0.3, 1.0))
|
|
|
|
shader.mgr.load()
|
|
shader.mgr.init_gl()
|
|
shader.mgr.select("ffp")
|
|
glDisable(GL_LIGHTING)
|
|
|
|
|
|
def init3d():
|
|
#print pygame.display.gl_get_attribute(GL_DEPTH_SIZE)
|
|
glViewport(0, 0, width, height)
|
|
glMatrixMode(GL_PROJECTION)
|
|
glLoadIdentity()
|
|
gluPerspective(45, 1.0*width/height, 1.0, 10e6)
|
|
glMatrixMode(GL_MODELVIEW)
|
|
glLoadIdentity()
|
|
|
|
glShadeModel(GL_SMOOTH)
|
|
glClearColor(0.0, 0.0, 0.0, 0.0)
|
|
glClearDepth(1.0)
|
|
glEnable(GL_DEPTH_TEST)
|
|
glEnable(GL_CULL_FACE)
|
|
glEnable(GL_TEXTURE_2D)
|
|
glDepthFunc(GL_LEQUAL)
|
|
#glEnable(GL_BLEND)
|
|
glHint(GL_PERSPECTIVE_CORRECTION_HINT, GL_NICEST)
|
|
glLightModeli(GL_LIGHT_MODEL_LOCAL_VIEWER, 0)
|
|
glLightModeli(GL_LIGHT_MODEL_TWO_SIDE, 1)
|
|
"""
|
|
"""
|
|
LightAmbient = ( (0.2, 0.2, 0.2, 1.0) )
|
|
LightDiffuse = ( (0.5, 0.5, 0.5, 1.0) )
|
|
LightPosition = ( (0.0, 0.2, 2.0, 1.0) )
|
|
glEnable(GL_LIGHTING)
|
|
glLightfv( GL_LIGHT1, GL_AMBIENT, LightAmbient )
|
|
glLightfv( GL_LIGHT1, GL_DIFFUSE, LightDiffuse )
|
|
glLightfv( GL_LIGHT1, GL_POSITION, LightPosition )
|
|
glEnable( GL_LIGHT1 )
|
|
"""
|
|
"""
|
|
|
|
shader.mgr.load()
|
|
shader.mgr.init_gl()
|
|
shader.mgr.select("standard")
|
|
glLightModelfv(GL_LIGHT_MODEL_AMBIENT, (0.3, 0.3, 0.3, 1.0))
|
|
#glEnable(GL_AUTO_NORMAL)
|
|
|
|
|
|
def predraw():
|
|
glClear(GL_COLOR_BUFFER_BIT|GL_DEPTH_BUFFER_BIT)
|
|
glLoadIdentity()
|
|
|
|
#glTranslatef(-1.0, 0.0, -9.0)
|
|
#glRotatef(270.0, 1.0, 0.0, 0.0)
|
|
|
|
def next_frame():
|
|
pygame.display.flip()
|
|
|
|
|
|
|
|
if __name__ == '__main__': main()
|
|
|