roc/video.py
cecilkorik deaa55d535 working textures!
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.
2011-06-17 19:54:49 -06:00

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()