00001 #ifndef __NYTRO_RenderThread_H
00002 #define __NYTRO_RenderThread_H
00003
00004
00005
00006
00007
00008
00009
00010
00011 #include "system/nyCommon.h"
00012 #include "system/nyThread.h"
00013
00014 namespace Nytro
00015 {
00016 namespace Graphics
00017 {
00018 class NYTRO_API RenderThread : public Core::Thread
00019 {
00020 public:
00021
00022 enum ERenderCommand
00023 {
00024 eRenderCommand_Initialize,
00025 eRenderCommand_Release,
00026 eRenderCommand_ApplyVideoMode,
00027 eRenderCommand_Fullscreen,
00028 eRenderCommand_Viewport,
00029 eRenderCommand_RenderTarget,
00030 eRenderCommand_ClearColor,
00031 eRenderCommand_ClearBuffers,
00032 eRenderCommand_FlipBuffers,
00033 eRenderCommand_BeginRender,
00034 eRenderCommand_EndRender,
00035 eRenderCommand_Store_color_buffer,
00036 eRenderCommand_Copy_backbuffer,
00037 eRenderCommand_Copy_render_target,
00038 eRenderCommand_Save_screenshot,
00039 eRenderCommand_Scissor_box,
00040 eRenderCommand_Force_wireframe,
00041 eRenderCommand_Wireframe_color,
00042 eRenderCommand_Global_shader,
00043
00044 eRenderCommand_Matrix_mode,
00045 eRenderCommand_Load_matrix,
00046 eRenderCommand_Load_identity,
00047 eRenderCommand_Multiply_matrix,
00048 eRenderCommand_Perspective,
00049 eRenderCommand_Ortho,
00050 eRenderCommand_Translate,
00051 eRenderCommand_Rotate,
00052 eRenderCommand_Scale,
00053 eRenderCommand_Push_matrix,
00054 eRenderCommand_Pop_matrix,
00055
00056 eRenderCommand_Project,
00057 eRenderCommand_Unproject,
00058 eRenderCommand_Unproject_screen_position,
00059
00060 eRenderCommand_Disable_texturing,
00061 eRenderCommand_Blending,
00062 eRenderCommand_Depth_test,
00063 eRenderCommand_Alpha_test,
00064 eRenderCommand_Stencil_test,
00065 eRenderCommand_Scissor_test,
00066 eRenderCommand_Depth_write,
00067 eRenderCommand_Color_write,
00068 eRenderCommand_Antialias_level,
00069 eRenderCommand_Cull_mode,
00070 eRenderCommand_Fill_mode,
00071 eRenderCommand_Depth_func,
00072 eRenderCommand_Alpha_func_and_ref,
00073 eRenderCommand_Depth_bias,
00074 eRenderCommand_Stencil_parameters,
00075 eRenderCommand_Point_sprites,
00076 eRenderCommand_Point_sprite_size,
00077 eRenderCommand_Point_sprite_scale,
00078 eRenderCommand_Texture_address,
00079 eRenderCommand_Texture_filter,
00080
00081 eRenderCommand_Setup_canvas,
00082 eRenderCommand_Setup_canvas_for_ui,
00083
00084 eRenderCommand_Draw_primitives_direct,
00085
00086 eRenderCommand_Load_shader,
00087 eRenderCommand_Delete_shader,
00088 eRenderCommand_Begin_use_shader,
00089 eRenderCommand_End_use_shader,
00090
00091 eRenderCommand_Occlusion_query,
00092
00093 eRenderCommand_Create_texture,
00094 eRenderCommand_Load_texture,
00095 eRenderCommand_Upload_texture,
00096 eRenderCommand_Use_texture,
00097 eRenderCommand_Delete_texture,
00098
00099 eRenderCommand_Create_vertexbuffer,
00100 eRenderCommand_Upload_vertexbuffer,
00101 eRenderCommand_Use_vertexbuffer,
00102 eRenderCommand_Render_vertexbuffer,
00103 eRenderCommand_Delete_vertexbuffer,
00104
00105 eRenderCommand_Create_instancebuffer,
00106 eRenderCommand_Upload_instancebuffer,
00107 eRenderCommand_Use_instancebuffer,
00108 eRenderCommand_Delete_instancebuffer,
00109
00110 eRenderCommand_Create_stateblock,
00111 eRenderCommand_Begin_stateblock,
00112 eRenderCommand_End_stateblock,
00113 eRenderCommand_Apply_stateblock,
00114 eRenderCommand_Delete_stateblock
00115 };
00116
00117 RenderThread();
00118 virtual ~RenderThread();
00119
00120 virtual void onRun();
00121 Core::ThreadDualMessageQueueSwitcher& getCommandQueues();
00122
00123 inline Core::ThreadMessageQueue* getFillingQueue()
00124 {
00125 return m_commandQueues.getFillingQueue();
00126 }
00127
00128 inline Core::ThreadMessageQueue& getResponseQueue()
00129 {
00130 return m_responseQueue;
00131 }
00132
00133 bool doneConsumingQueue();
00134
00135 protected:
00136
00137 Core::ThreadDualMessageQueueSwitcher m_commandQueues;
00138 Core::ThreadMessageQueue m_responseQueue;
00139 volatile bool m_bConsuming;
00140 };
00141 };
00142 };
00143
00144 #endif