00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #include "config_tinydisplay.h"
00016 #include "tinyXGraphicsPipe.h"
00017 #include "tinyXGraphicsWindow.h"
00018 #include "tinyWinGraphicsPipe.h"
00019 #include "tinyWinGraphicsWindow.h"
00020 #include "tinyOsxGraphicsPipe.h"
00021 #include "tinyOsxGraphicsWindow.h"
00022 #include "tinySDLGraphicsPipe.h"
00023 #include "tinySDLGraphicsWindow.h"
00024 #include "tinyOffscreenGraphicsPipe.h"
00025 #include "tinyGraphicsBuffer.h"
00026 #include "tinyGraphicsStateGuardian.h"
00027 #include "tinyGeomMunger.h"
00028 #include "tinyTextureContext.h"
00029 #include "graphicsPipeSelection.h"
00030 #include "dconfig.h"
00031 #include "pandaSystem.h"
00032
00033 Configure(config_tinydisplay);
00034 NotifyCategoryDef(tinydisplay, "display");
00035
00036 ConfigureFn(config_tinydisplay) {
00037 init_libtinydisplay();
00038 }
00039
00040 ConfigVariableBool show_resize_box
00041 ("show-resize-box", true,
00042 PRC_DESC("When this variable is true, then resizable OSX Panda windows will "
00043 "be rendered with a resize control in the lower-right corner. "
00044 "This is specially handled by Panda, since otherwise the 3-d "
00045 "window would completely hide any resize control drawn by the "
00046 "OS. Set this variable false to allow this control to be hidden."));
00047
00048 ConfigVariableBool osx_disable_event_loop
00049 ("osx-disable-event-loop", false,
00050 PRC_DESC("Set this true to disable the window event loop for the Panda "
00051 "windows. This makes sense only in a publish environment where "
00052 "the window event loop is already handled by another part of the "
00053 "app."));
00054
00055 ConfigVariableInt osx_mouse_wheel_scale
00056 ("osx-mouse-wheel-scale", 1,
00057 PRC_DESC("Specify the number of units to spin the Mac mouse wheel to "
00058 "represent a single wheel_up or wheel_down message."));
00059
00060 ConfigVariableBool td_ignore_mipmaps
00061 ("td-ignore-mipmaps", false,
00062 PRC_DESC("Configure this true to disable use of mipmaps on the "
00063 "tinydisplay software renderer."));
00064
00065 ConfigVariableBool td_ignore_clamp
00066 ("td-ignore-clamp", false,
00067 PRC_DESC("Configure this true to disable texture clamp mode and other "
00068 "wrap modes other than repeat (all textures will repeat, which "
00069 "is a little cheaper)."));
00070
00071 ConfigVariableBool td_perspective_textures
00072 ("td-perspective-textures", true,
00073 PRC_DESC("Configure this false to disable use of perspective-correct "
00074 "textures on the tinydisplay software renderer, for a small "
00075 "performance gain."));
00076
00077
00078
00079
00080
00081
00082
00083
00084
00085 void
00086 init_libtinydisplay() {
00087 static bool initialized = false;
00088 if (initialized) {
00089 return;
00090 }
00091 initialized = true;
00092
00093 TinyGraphicsBuffer::init_type();
00094 TinyGraphicsStateGuardian::init_type();
00095 TinyGeomMunger::init_type();
00096 TinyTextureContext::init_type();
00097
00098 PandaSystem *ps = PandaSystem::get_global_ptr();
00099 ps->add_system("TinyPanda");
00100
00101 GraphicsPipeSelection *selection = GraphicsPipeSelection::get_global_ptr();
00102
00103 #ifdef HAVE_X11
00104 TinyXGraphicsPipe::init_type();
00105 TinyXGraphicsWindow::init_type();
00106 selection->add_pipe_type(TinyXGraphicsPipe::get_class_type(),
00107 TinyXGraphicsPipe::pipe_constructor);
00108 ps->set_system_tag("TinyPanda", "native_window_system", "X11");
00109 #endif
00110
00111 #ifdef WIN32
00112 TinyWinGraphicsPipe::init_type();
00113 TinyWinGraphicsWindow::init_type();
00114 selection->add_pipe_type(TinyWinGraphicsPipe::get_class_type(),
00115 TinyWinGraphicsPipe::pipe_constructor);
00116 ps->set_system_tag("TinyPanda", "native_window_system", "Win");
00117 #endif
00118
00119 #if defined(IS_OSX) && !defined(BUILD_IPHONE)
00120 TinyOsxGraphicsPipe::init_type();
00121 TinyOsxGraphicsWindow::init_type();
00122 selection->add_pipe_type(TinyOsxGraphicsPipe::get_class_type(),
00123 TinyOsxGraphicsPipe::pipe_constructor);
00124 ps->set_system_tag("TinyPanda", "native_window_system", "OSX");
00125 #endif
00126
00127 #ifdef HAVE_SDL
00128 TinySDLGraphicsPipe::init_type();
00129 TinySDLGraphicsWindow::init_type();
00130 selection->add_pipe_type(TinySDLGraphicsPipe::get_class_type(),
00131 TinySDLGraphicsPipe::pipe_constructor);
00132 ps->set_system_tag("TinyPanda", "SDL", "SDL");
00133 #endif
00134
00135 TinyOffscreenGraphicsPipe::init_type();
00136 selection->add_pipe_type(TinyOffscreenGraphicsPipe::get_class_type(),
00137 TinyOffscreenGraphicsPipe::pipe_constructor);
00138 ps->set_system_tag("TinyPanda", "", "");
00139 }
00140
00141
00142
00143
00144
00145
00146 int
00147 get_pipe_type_p3tinydisplay() {
00148
00149 #ifdef WIN32
00150 return TinyWinGraphicsPipe::get_class_type().get_index();
00151 #endif
00152
00153 #if defined(IS_OSX) && !defined(BUILD_IPHONE)
00154 return TinyOsxGraphicsPipe::get_class_type().get_index();
00155 #endif
00156
00157 #ifdef HAVE_X11
00158 return TinyXGraphicsPipe::get_class_type().get_index();
00159 #endif
00160
00161 #ifdef HAVE_SDL
00162 return TinySDLGraphicsPipe::get_class_type().get_index();
00163 #endif
00164
00165 return TinyOffscreenGraphicsPipe::get_class_type().get_index();
00166 }