oh… I mis-stated myself then… or forgot to state something… >.>
no, initially, the fonts are created first:
__GL.glEnable(__GL.GL_TEXTURE_2D)
texture = __GL.glGenTextures(1)
__GL.glBindTexture(__GL.GL_TEXTURE_2D, texture)
__GL.glTexParameteri(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_MAG_FILTER, __GL.GL_LINEAR)
__GL.glTexParameteri(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_MIN_FILTER, __GL.GL_LINEAR)
__GL.glTexImage2D(
__GL.GL_TEXTURE_2D, # target texture type
0, # number of mipmaps
__GL.GL_RGBA, # texture format
data_w, data_h,
0, #border
__GL.GL_RGBA, # input pixel format
__GL.GL_UNSIGNED_BYTE, # input data format
data) # pixel data
__GL.glDisable(__GL.GL_TEXTURE_2D)
along with the display lists that draw the textured quads:
list = __GL.glGenLists(1)
__GL.glNewList( list, __GL.GL_COMPILE )
__GL.glBindTexture(__GL.GL_TEXTURE_2D, texture)
__GL.glBegin(__GL.GL_QUADS)
__GL.glTexCoord2f(0.0, 0.0); __GL.glVertex2f(0.0, 0.0)
__GL.glTexCoord2f(0.0, 1.0); __GL.glVertex2f(0.0, data_h)
__GL.glTexCoord2f(1.0, 1.0); __GL.glVertex2f(data_w, data_h)
__GL.glTexCoord2f(1.0, 0.0); __GL.glVertex2f(data_w, 0.0)
__GL.glEnd()
__GL.glEndList()
this is what gets drawn after the models which currently don’t exist…
once the models are imported, everything is initialized once (following the same method above)
textures created:
__GL.glEnable(__GL.GL_TEXTURE_2D)
__GL.glDeleteTextures(__GL_TEX.values()) #clear the last model's textures
__GL_TEX.clear() #remove the reference IDs
#(re)define textures here
__GL.glPixelStorei(__GL.GL_UNPACK_ALIGNMENT,1)
for ImageName,ImageW,ImageH,ImagePixels,ImageColors in Libs[7]:
image = bytearray()
if len(ImageColors)==0:
ImageFormat = len(ImagePixels[0])-1 #I, IA, RGB, or RGBA format
for IRAGBA in ImagePixels: image += bytearray(IRAGBA)
else:
ImageFormat = len(ImageColors[0])-1 #I, IA, RGB, or RGBA format
for I in ImagePixels: image += bytearray(ImageColors[i])
__GL_TEX[ImageName] = __GL.glGenTextures(1)
__GL.glBindTexture(__GL.GL_TEXTURE_2D, __GL_TEX[ImageName] )
__GL.glTexParameteri(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_MAG_FILTER, __GL.GL_LINEAR)
__GL.glTexParameteri(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_MIN_FILTER, __GL.GL_LINEAR)
_IFMT = [__GL.GL_RGB, __GL.GL_RGBA, __GL.GL_RGB, __GL.GL_RGBA][ImageFormat]
_PXFMT = [__GL.GL_LUMINANCE,__GL.GL_LUMINANCE_ALPHA,__GL.GL_RGB,__GL.GL_RGBA][ImageFormat]
__GL.glTexImage2D(__GL.GL_TEXTURE_2D, 0, _IFMT, ImageW, ImageH, 0, _PXFMT, __GL.GL_UNSIGNED_BYTE, str(image))
__GL.glDisable(__GL.GL_TEXTURE_2D)
and then the dislay list for the entire model:
#generate Model Display-List here
__MODEL_DATA = __GL.glGenLists(1)
__GL.glNewList(__MODEL_DATA, __GL.GL_COMPILE)
__GL.glColor3f(1.0,1.0,1.0)
for SceneName,SceneObjects in Libs[2]:
for ObjectID in SceneObjects:
ObjectName,ObjectViewport,ObjectLRS,ObjectSubData,ObjectParentID=Libs[3][ObjectID]
SubDataType,SubDataName,SubDataData1,SubDataData2=ObjectSubData
if SubDataType=="_Mesh":
__GL.glLineWidth(1.0)
MaterialName,MaterialTEVs,MaterialColors,MaterialTextures,R1,R2 = Libs[4][SubDataData1] if type(SubDataData1)==int else [
"UMC_Def_Mat", '', [[1.0,1.0,1.0,1.0],[1.0,1.0,1.0,1.0],[0.5,0.5,0.5,1.0],[0.0,0.0,0.0,0.0],25.0], [], [], []
]
MAR,MAG,MAB,MAA = MaterialColors[0] #Ambient
MDR,MDG,MDB,MDA = MaterialColors[1] #Diffuse
MSR,MSG,MSB,MSA = MaterialColors[2] #Specular
MER,MEG,MEB,MEA = MaterialColors[3] #Emmisive
MSV = MaterialColors[4] #Shininess
C0R,C0G,C0B,C0A= (MAR+MDR)/2,(MAG+MDG)/2,(MAB+MDB)/2,(MAA+MDA)/2
MeshVerts,MeshNormals,MeshColors,MeshUVs,MeshWeights,MeshPrimitives=SubDataData2
#call from pre-defined textures here
for TextureID in MaterialTextures:
TextureName,TextureParams,TextureEnvParams,TextureR1,TextureImageName,TextureR2 = Libs[6][TextureID]
# Apply Texture(s)
__GL.glBindTexture(__GL.GL_TEXTURE_2D, __GL_TEX[TextureImageName] )
'''
__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_T, __GL.GL_CLAMP)
'''
__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_REPEAT)
__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_T, __GL.GL_REPEAT)
#'''
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_MAG_FILTER, __GL.GL_LINEAR)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_MIN_FILTER, __GL.GL_LINEAR)
break #only use the first for now
#notes:
#__GL.glTexEnvf(__GL.GL_TEXTURE_ENV, __GL.GL_TEXTURE_ENV_MODE, __GL.GL_MODULATE)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_DEPTH_STENCIL_TEXTURE_MODE,
# [__GL.GL_DEPTH_COMPONENT, __GL.GL_STENCIL_COMPONENT][T0])
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_BASE_LEVEL, int(T1))
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_BORDER_COLOR, [R,G,B,A])
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_COMPARE_FUNC,
# [__GL.GL_CLAMP][T3])
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
#__GL.glTexParameterf(__GL.GL_TEXTURE_2D, __GL.GL_TEXTURE_WRAP_S, __GL.GL_CLAMP)
'''
glTexParameterf(
GL_TEXTURE_1D, GL_TEXTURE_2D, GL_TEXTURE_3D, GL_TEXTURE_1D_ARRAY,
GL_TEXTURE_2D_ARRAY, GL_TEXTURE_RECTANGLE, GL_TEXTURE_CUBE_MAP
,
GL_DEPTH_STENCIL_TEXTURE_MODE, GL_TEXTURE_BASE_LEVEL, GL_TEXTURE_BORDER_COLOR,
GL_TEXTURE_COMPARE_FUNC, GL_TEXTURE_COMPARE_MODE, GL_TEXTURE_LOD_BIAS,
GL_TEXTURE_MIN_FILTER, GL_TEXTURE_MAG_FILTER, GL_TEXTURE_MIN_LOD,
GL_TEXTURE_MAX_LOD, GL_TEXTURE_MAX_LEVEL, GL_TEXTURE_SWIZZLE_R,
GL_TEXTURE_SWIZZLE_G, GL_TEXTURE_SWIZZLE_B, GL_TEXTURE_SWIZZLE_A,
GL_TEXTURE_SWIZZLE_RGBA, GL_TEXTURE_WRAP_S, GL_TEXTURE_WRAP_T, GL_TEXTURE_WRAP_R
,
GL_DEPTH_STENCIL_TEXTURE_MODE: GL_DEPTH_COMPONENT, GL_STENCIL_COMPONENT
GL_TEXTURE_BASE_LEVEL: int(MipMap)
GL_TEXTURE_BORDER_COLOR: [R,G,B,A]
GL_TEXTURE_COMPARE_FUNC: GL_LEQUAL, GL_GEQUAL, GL_LESS, GL_GREATER,
GL_EQUAL, GL_NOTEQUAL, GL_ALWAYS, GL_NEVER
#NOTE: GL_TEXTURE_COMPARE_MODE = GL_COMPARE_REF_TO_TEXTURE
GL_TEXTURE_COMPARE_MODE: GL_COMPARE_REF_TO_TEXTURE, GL_NONE
GL_TEXTURE_LOD_BIAS: float(Bias)
GL_TEXTURE_MIN_FILTER: GL_NEAREST, GL_LINEAR, GL_NEAREST_MIPMAP_NEAREST
GL_LINEAR_MIPMAP_NEAREST, GL_NEAREST_MIPMAP_LINEAR, GL_LINEAR_MIPMAP_LINEAR
GL_TEXTURE_MAG_FILTER: GL_NEAREST, GL_LINEAR
GL_TEXTURE_MIN_LOD: -1000
GL_TEXTURE_MAX_LOD: 1000
GL_TEXTURE_MAX_LEVEL: 1000
GL_TEXTURE_SWIZZLE_R: GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_ZERO, GL_ONE
GL_TEXTURE_SWIZZLE_G: GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_ZERO, GL_ONE
GL_TEXTURE_SWIZZLE_B: GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_ZERO, GL_ONE
GL_TEXTURE_SWIZZLE_A: GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_ZERO, GL_ONE
GL_TEXTURE_SWIZZLE_RGBA: GL_RED, GL_GREEN, GL_BLUE, GL_ALPHA, GL_ZERO, GL_ONE
GL_TEXTURE_WRAP_S: GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER, GL_MIRRORED_REPEAT,
GL_REPEAT, GL_MIRROR_CLAMP_TO_EDGE
GL_TEXTURE_WRAP_T: GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER, GL_MIRRORED_REPEAT,
GL_REPEAT, GL_MIRROR_CLAMP_TO_EDGE
GL_TEXTURE_WRAP_R: GL_CLAMP_TO_EDGE, GL_CLAMP_TO_BORDER, GL_MIRRORED_REPEAT,
GL_REPEAT, GL_MIRROR_CLAMP_TO_EDGE
)
glTexEnvf(
GL_TEXTURE_ENV, GL_POINT_SPRITE_OES
,
GL_TEXTURE_ENV_MODE, GL_COMBINE_RGB, GL_COMBINE_ALPHA,
GL_SRC0_RGB, GL_SRC1_RGB, GL_SRC2_RGB,
GL_SRC0_ALPHA, GL_SRC1_ALPHA, GL_SRC2_ALPHA,
GL_OPERAND0_RGB, GL_OPERAND1_RGB, GL_OPERAND2_RGB,
GL_OPERAND0_ALPHA, GL_OPERAND1_ALPHA, GL_OPERAND2_ALPHA,
GL_RGB_SCALE, GL_ALPHA_SCALE, GL_COORD_REPLACE_OES
,
GL_ADD, GL_ADD_SIGNED, GL_DOT3_RGB, GL_DOT3_RGBA,
GL_INTERPOLATE, GL_MODULATE, GL_DECAL, GL_BLEND,
GL_REPLACE, GL_SUBTRACT, GL_COMBINE, GL_TEXTURE,
GL_CONSTANT, GL_PRIMARY_COLOR, GL_PREVIOUS, GL_SRC_COLOR,
GL_ONE_MINUS_SRC_COLOR, GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA,
(a single boolean value for the point sprite texture coordinate replacement,
or 1.0, 2.0, or 4.0 when specifying the GL_RGB_SCALE or GL_ALPHA_SCALE)
)
'''
LC0,LC1=[0,0,0,0],[0,0,0,0] #Remember last used colors (starts at transparent black)
for Primitive,Facepoints in MeshPrimitives:
__GL.glBegin(__UMCGLPRIMITIVES[Primitive])
for V,N,(C0,C1),(U0,U1,U2,U3,U4,U5,U6,U7) in Facepoints:
try:
if U0!='': __GL.glMultiTexCoord2f(__GL.GL_TEXTURE0,MeshUVs[0][U0][0],MeshUVs[0][U0][1])
#if U1!='': glMultiTexCoord2f(GL_TEXTURE1,Fl(UVs[1][U1][0]),Fl(UVs[1][U1][1]))
#if U2!='': glMultiTexCoord2f(GL_TEXTURE2,Fl(UVs[2][U2][0]),Fl(UVs[2][U2][1]))
#if U3!='': glMultiTexCoord2f(GL_TEXTURE3,Fl(UVs[3][U3][0]),Fl(UVs[3][U3][1]))
#if U4!='': glMultiTexCoord2f(GL_TEXTURE4,Fl(UVs[4][U4][0]),Fl(UVs[4][U4][1]))
#if U5!='': glMultiTexCoord2f(GL_TEXTURE5,Fl(UVs[5][U5][0]),Fl(UVs[5][U5][1]))
#if U6!='': glMultiTexCoord2f(GL_TEXTURE6,Fl(UVs[6][U6][0]),Fl(UVs[6][U6][1]))
#if U7!='': glMultiTexCoord2f(GL_TEXTURE7,Fl(UVs[7][U7][0]),Fl(UVs[7][U7][1]))
#max texture is 31
except: #TODO: note UV display error
pass
if C0!='': #IRAGBA format
C0L=len(MeshColors[0][C0])
C0R,C0G,C0B,C0A=[__if2f(MeshColors[0][C0][0]),
__if2f(MeshColors[0][C0][1]) if C0L>2 else __if2f(MeshColors[0][C0][0]),
__if2f(MeshColors[0][C0][2]) if C0L>2 else __if2f(MeshColors[0][C0][0]),
__if2f(MeshColors[0][C0][3]) if C0L==4 else (__if2f(MeshColors[0][C0][1]) if C0L==2 else 1.0)]
__GL.glColor4f((MAR+MDR+C0R)/3,(MAG+MDG+C0G)/3,(MAB+MDB+C0B)/3,(MAA+MDA+C0A)/3)
if C1!='': #IRAGBA format
C1L=len(MeshColors[1][C1])
C1R,C1G,C1B,C1A=[__if2f(MeshColors[1][C1][0]),
__if2f(MeshColors[1][C1][1]) if C1L>2 else __if2f(MeshColors[1][C1][0]),
__if2f(MeshColors[1][C1][2]) if C1L>2 else __if2f(MeshColors[1][C1][0]),
__if2f(MeshColors[1][C1][3]) if C1L==4 else (__if2f(MeshColors[1][C1][1]) if C1L==2 else 1.0)]
__GL.glSecondaryColor3f(C1R,C1G,C1B)
#Alpha is supported but not registered here (glSecondaryColor4f is not a registered function)
UpdateMat=0
if LC0!=[C0R,C0G,C0B,C0A]: UpdateMat=1; LC0=[C0R,C0G,C0B,C0A]
#if LC1!=[C1R,C1G,C1B,C1A]: UpdateMat=1; LC1=[C1R,C1G,C1B,C1A]
if UpdateMat:
__GL.glMaterialfv(__GL.GL_FRONT_AND_BACK, __GL.GL_AMBIENT, [(MAR+C0R)/2,(MAG+C0G)/2,(MAB+C0B)/2,(MAA+C0A)/2])
__GL.glMaterialfv(__GL.GL_FRONT_AND_BACK, __GL.GL_DIFFUSE, [(MDR+C0R)/2,(MDG+C0G)/2,(MDB+C0B)/2,(MDA+C0A)/2])
__GL.glMaterialfv(__GL.GL_FRONT_AND_BACK, __GL.GL_SPECULAR, [(MSR+C0R)/2,(MSG+C0G)/2,(MSB+C0B)/2,(MSA+C0A)/2])
#__GL.glMaterialfv(__GL.GL_FRONT_AND_BACK, __GL.GL_SPECULAR, [0,0,0,1])
__GL.glMaterialfv(__GL.GL_FRONT_AND_BACK, __GL.GL_EMISSION, [MER,MEG,MEB,MEA])
__GL.glMaterialf(__GL.GL_FRONT_AND_BACK, __GL.GL_SHININESS, MSV)
if N!='': __GL.glNormal3f(MeshNormals[N][0],MeshNormals[N][1],MeshNormals[N][2])
VL=len(MeshVerts[V])
VX,VY,VZ=MeshVerts[V]+([0.0] if VL==2 else [])
__GL.glVertex3f(VX,VY,VZ)
__GL.glEnd()
__GL.glEndList()
^ yes, I know… dev4x sucks…
(dev5 is being completely rebuilt to take the more-modern approach using shaders and such)
however, that doesn’t mean I have to scrap the old method entirely, on a program that’s meant to be able to run on anything from a Pentium II, up
(I know someone who has a P-II running PJ64 at near-perfect frame-rate)