Ooops
November 28, 2020, 11:09:39 AM

Author Topic: [bmx] RenderState.Push() + Pop() Methods by sswift [ 1+ years ago ]  (Read 360 times)

Offline BlitzBot

  • Jr. Member
  • **
  • Posts: 1
Title : RenderState.Push() + Pop() Methods
Author : sswift
Posted : 1+ years ago

Description : Push and pop the current render state off a stack!  Saves and restores all render parameters.  Scale, rotation, alpha, color, etc!

Code :
Code: BlitzMax
  1. Type RenderState
  2.  
  3.         Global RenderStateList:TList = CreateList()
  4.                                
  5.         Field Alpha#
  6.         Field Blend
  7.         Field ClsColor_R, ClsColor_G, ClsColor_B
  8.         Field Color_R, Color_G, Color_B
  9.         Field Handle_X#, Handle_Y#
  10.         Field ImageFont:TImageFont
  11.         Field LineWidth#
  12.         Field MaskColor_R, MaskColor_G, MaskColor_B
  13.         Field Origin_X#, Origin_Y#
  14.         Field Rotation#
  15.         Field Scale_X#, Scale_Y#
  16.         Field Viewport_X, Viewport_Y, Viewport_Width, Viewport_Height
  17.  
  18.  
  19.         ' -------------------------------------------------------------------------------------------------------------------------------------------------------
  20.         ' These methods allow you to save and restore the current render settings
  21.         '
  22.         ' Each time you call the push method, the current state is placed on the stack.
  23.         ' Each time you call the pop method, the last state placed on the stack is restored and removed from the stack.
  24.         ' -------------------------------------------------------------------------------------------------------------------------------------------------------
  25.  
  26.                
  27.                 Function Push()
  28.  
  29.                         Local RS:RenderState = New RenderState
  30.  
  31.                         RS.Alpha# = GetAlpha#()
  32.                         RS.Blend  = GetBlend()
  33.                         GetClsColor(RS.ClsColor_R, RS.ClsColor_G, RS.ClsColor_B)
  34.                         GetColor(RS.Color_R, RS.Color_G, RS.Color_B)
  35.                         GetHandle(RS.Handle_X#, RS.Handle_Y#)
  36.                         RS.ImageFont = GetImageFont()
  37.                         RS.LineWidth# = GetLineWidth#()
  38.                         GetMaskColor(RS.MaskColor_R, RS.MaskColor_G, RS.MaskColor_B)
  39.                         GetOrigin(RS.Origin_X#, RS.Origin_Y#)
  40.                         RS.Rotation# = GetRotation#()
  41.                         GetScale(RS.Scale_X#, RS.Scale_Y#)
  42.                         GetViewport(RS.Viewport_X, RS.Viewport_Y, RS.Viewport_Width, RS.Viewport_Height)
  43.                
  44.                         RenderStateList.AddLast(RS)
  45.                
  46.                 End Function           
  47.  
  48.  
  49.                 Function Pop()
  50.                
  51.                         Local RS:RenderState = RenderState(RenderStateList.RemoveLast())       
  52.                                
  53.                         SetAlpha(RS.Alpha#)
  54.                         SetBlend(RS.Blend)
  55.                         SetClsColor(RS.ClsColor_R, RS.ClsColor_G, RS.ClsColor_B)
  56.                         SetColor(RS.Color_R, RS.Color_G, RS.Color_B)
  57.                         SetHandle(RS.Handle_X#, RS.Handle_Y#)
  58.                         SetImageFont(RS.ImageFont)
  59.                         SetLineWidth(RS.LineWidth#)
  60.                         SetMaskColor(RS.MaskColor_R, RS.MaskColor_G, RS.MaskColor_B)
  61.                         SetOrigin(RS.Origin_X#, RS.Origin_Y#)
  62.                         SetRotation(RS.Rotation#)
  63.                         SetScale(RS.Scale_X#, RS.Scale_Y#)
  64.                         SetViewport(RS.Viewport_X, RS.Viewport_Y, RS.Viewport_Width, RS.Viewport_Height)
  65.  
  66.                 End Function
  67.  
  68.  
  69. End Type


Comments : none...

 

SimplePortal 2.3.6 © 2008-2014, SimplePortal