Журнал о программированнии на языках Blitz3D, BlitzPlus, BlitzMax

BlitzMax-код:RenderStateMethods.bmx

Материал из Blitz Et Cetera

Перейти к: навигация, поиск
Type RenderState


        Global RenderStateList:TList = CreateList()
                               
        Field Alpha#
        Field Blend
        Field ClsColor_R, ClsColor_G, ClsColor_B
        Field Color_R, Color_G, Color_B
        Field Handle_X#, Handle_Y#
        Field ImageFont:TImageFont
        Field LineWidth#
        Field MaskColor_R, MaskColor_G, MaskColor_B
        Field Origin_X#, Origin_Y#
        Field Rotation#
        Field Scale_X#, Scale_Y#
        Field Viewport_X, Viewport_Y, Viewport_Width, Viewport_Height


        ' -------------------------------------------------------------------------------------------------------------------------------------------------------
        ' These methods allow you to save and restore the current render settings
        '
        ' Each time you call the push method, the current state is placed on the stack.
        ' Each time you call the pop method, the last state placed on the stack is restored and removed from the stack.
        ' -------------------------------------------------------------------------------------------------------------------------------------------------------

               
                Function Push()

                        Local RS:RenderState = New RenderState

                        RS.Alpha# = GetAlpha#()
                        RS.Blend  = GetBlend()
                        GetClsColor(RS.ClsColor_R, RS.ClsColor_G, RS.ClsColor_B)
                        GetColor(RS.Color_R, RS.Color_G, RS.Color_B)
                        GetHandle(RS.Handle_X#, RS.Handle_Y#)
                        RS.ImageFont = GetImageFont()
                        RS.LineWidth# = GetLineWidth#()
                        GetMaskColor(RS.MaskColor_R, RS.MaskColor_G, RS.MaskColor_B)
                        GetOrigin(RS.Origin_X#, RS.Origin_Y#)
                        RS.Rotation# = GetRotation#()
                        GetScale(RS.Scale_X#, RS.Scale_Y#)
                        GetViewport(RS.Viewport_X, RS.Viewport_Y, RS.Viewport_Width, RS.Viewport_Height)
               
                        RenderStateList.AddLast(RS)
               
                End Function           


                Function Pop()
               
                        Local RS:RenderState = RenderState(RenderStateList.RemoveLast())       
                               
                        SetAlpha(RS.Alpha#)
                        SetBlend(RS.Blend)
                        SetClsColor(RS.ClsColor_R, RS.ClsColor_G, RS.ClsColor_B)
                        SetColor(RS.Color_R, RS.Color_G, RS.Color_B)
                        SetHandle(RS.Handle_X#, RS.Handle_Y#)
                        SetImageFont(RS.ImageFont)
                        SetLineWidth(RS.LineWidth#)
                        SetMaskColor(RS.MaskColor_R, RS.MaskColor_G, RS.MaskColor_B)
                        SetOrigin(RS.Origin_X#, RS.Origin_Y#)
                        SetRotation(RS.Rotation#)
                        SetScale(RS.Scale_X#, RS.Scale_Y#)
                        SetViewport(RS.Viewport_X, RS.Viewport_Y, RS.Viewport_Width, RS.Viewport_Height)

                End Function


End Type

Другие

Друзья