diff --git a/doc/makepanda/makepanda.py b/doc/makepanda/makepanda.py index 1029fd85b8..c908d998e6 100755 --- a/doc/makepanda/makepanda.py +++ b/doc/makepanda/makepanda.py @@ -1893,6 +1893,7 @@ if (SLAVEBUILD==0): CopyFile('built/bin/', 'thirdparty/win-python/python24.dll') if (OMIT.count("PYTHON")==0): CopyTree('built/python', 'thirdparty/win-python') + ConditionalWriteFile('built/python/panda.pth',"..\n../bin\n") ######################################################################## ## diff --git a/doc/makepanda/makepanda71.vcproj b/doc/makepanda/makepanda71.vcproj index e689dc1006..eb1ee2a0c4 100755 --- a/doc/makepanda/makepanda71.vcproj +++ b/doc/makepanda/makepanda71.vcproj @@ -18,7 +18,7 @@ + Output="..\built\python\python.exe"/> diff --git a/panda/src/display/graphicsOutput.cxx b/panda/src/display/graphicsOutput.cxx index 7d54fe12bb..96efc9753c 100644 --- a/panda/src/display/graphicsOutput.cxx +++ b/panda/src/display/graphicsOutput.cxx @@ -32,6 +32,10 @@ #include "perspectiveLens.h" #include "pointerTo.h" #include "compassEffect.h" +#include "geom.h" +#include "geomNode.h" +#include "geomTristrips.h" +#include "geomVertexWriter.h" TypeHandle GraphicsOutput::_type_handle; @@ -87,6 +91,7 @@ GraphicsOutput(GraphicsPipe *pipe, GraphicsStateGuardian *gsg, _one_shot = false; _inverted = window_inverted; _delete_flag = false; + _texture_card = 0; int mode = gsg->get_properties().get_frame_buffer_mode(); if ((mode & FrameBufferProperties::FM_buffer) == FrameBufferProperties::FM_single_buffer) { @@ -217,31 +222,30 @@ void GraphicsOutput:: setup_render_texture(Texture *tex, bool allow_bind, bool to_ram) { MutexHolder holder(_lock); + if (to_ram) { + _rtm_mode = RTM_copy_ram; + } else if (allow_bind) { + _rtm_mode = RTM_bind_or_copy; + } else { + _rtm_mode = RTM_copy_texture; + } + if (tex == (Texture *)NULL) { _texture = new Texture(get_name()); _texture->set_wrap_u(Texture::WM_clamp); _texture->set_wrap_v(Texture::WM_clamp); - } else { _texture = tex; _texture->clear_ram_image(); } _texture->set_match_framebuffer_format(true); - + // Go ahead and tell the texture our anticipated size, even if it // might be inaccurate (particularly if this is a GraphicsWindow, // which has system-imposed restrictions on size). _texture->set_x_size(get_x_size()); _texture->set_y_size(get_y_size()); - if (to_ram) { - _rtm_mode = RTM_copy_ram; - } else if (allow_bind) { - _rtm_mode = RTM_bind_if_possible; - } else { - _rtm_mode = RTM_copy_texture; - } - nassertv(_gsg != (GraphicsStateGuardian *)NULL); set_inverted(_gsg->get_copy_texture_inverted()); } @@ -460,6 +464,110 @@ get_active_display_region(int n) const { return result; } +//////////////////////////////////////////////////////////////////// +// Function: create_texture_card_vdata +// Access: Static +// Description: Generates a GeomVertexData for a texture card. +//////////////////////////////////////////////////////////////////// +static PT(GeomVertexData) +create_texture_card_vdata(int x, int y) +{ + int xru = Texture::up_to_power_2(x); + int yru = Texture::up_to_power_2(y); + + float xhi = (x * 1.0f) / xru; + float yhi = (y * 1.0f) / yru; + + CPT(GeomVertexFormat) format = GeomVertexFormat::get_v3n3cpt2(); + + PT(GeomVertexData) vdata = new GeomVertexData + ("card", format, Geom::UH_static); + + GeomVertexWriter vertex(vdata, InternalName::get_vertex()); + GeomVertexWriter texcoord(vdata, InternalName::get_texcoord()); + GeomVertexWriter normal(vdata, InternalName::get_normal()); + + vertex.add_data3f(Vertexf::rfu(-1.0f, 0.0f, 1.0f)); + vertex.add_data3f(Vertexf::rfu(-1.0f, 0.0f, -1.0f)); + vertex.add_data3f(Vertexf::rfu( 1.0f, 0.0f, 1.0f)); + vertex.add_data3f(Vertexf::rfu( 1.0f, 0.0f, -1.0f)); + + texcoord.add_data2f( 0.0f, yhi); + texcoord.add_data2f( 0.0f, 0.0f); + texcoord.add_data2f( xhi, yhi); + texcoord.add_data2f( xhi, 0.0f); + + normal.add_data3f(LVector3f::back()); + normal.add_data3f(LVector3f::back()); + normal.add_data3f(LVector3f::back()); + normal.add_data3f(LVector3f::back()); + + return vdata; +} + +//////////////////////////////////////////////////////////////////// +// Function: GraphicsOutput::set_size_and_recalc +// Access: Public +// Description: Changes the x_size and y_size, then recalculates +// structures that depend on size. The recalculation +// currently includes: +// - compute_pixels on all the graphics regions. +// - updating the texture card, if one is present. +//////////////////////////////////////////////////////////////////// +void GraphicsOutput:: +set_size_and_recalc(int x, int y) { + _x_size = x; + _y_size = y; + _has_size = true; + + TotalDisplayRegions::iterator dri; + for (dri = _total_display_regions.begin(); + dri != _total_display_regions.end(); + ++dri) { + (*dri)->compute_pixels(x,y); + } + + if (_texture_card != 0) { + _texture_card->set_vertex_data(create_texture_card_vdata(x, y)); + } +} + +//////////////////////////////////////////////////////////////////// +// Function: GraphicsOutput::get_texture_card +// Access: Published +// Description: Returns a PandaNode containing a square polygon. +// The dimensions are (-1,0,-1) to (1,0,1). The texture +// coordinates are such that the texture of this +// GraphicsOutput is aligned properly to the polygon. +// The GraphicsOutput promises to surgically update +// the Geom inside the PandaNode if necessary to maintain +// this invariant. +// +// Each invocation of this function returns a freshly- +// allocated PandaNode. You can therefore safely modify +// the RenderAttribs of the PandaNode. The +// PandaNode is initially textured with the texture +// of this GraphicOutput. +//////////////////////////////////////////////////////////////////// +NodePath GraphicsOutput:: +get_texture_card() { + if (_texture_card == 0) { + PT(GeomVertexData) vdata = create_texture_card_vdata(_x_size, _y_size); + PT(GeomTristrips) strip = new GeomTristrips(Geom::UH_static); + strip->set_shade_model(Geom::SM_uniform); + strip->add_next_vertices(4); + strip->close_primitive(); + _texture_card = new Geom(vdata); + _texture_card->add_primitive(strip); + } + + PT(GeomNode) gnode = new GeomNode("texture card"); + gnode->add_geom(_texture_card); + NodePath path(gnode); + path.set_texture(get_texture(), 0); + return path; +} + //////////////////////////////////////////////////////////////////// // Function: GraphicsOutput::make_texture_buffer // Access: Published @@ -509,6 +617,15 @@ make_texture_buffer(const string &name, int x_size, int y_size, GraphicsOutput *buffer = NULL; + if ((x_size == 0) && (y_size == 0)) { + // Currently, only parasite buffers support the tracking of the + // host window size. If the user requests this, we have to use a + // parasite buffer. + buffer = engine->make_parasite(host, name, sort, x_size, y_size); + buffer->setup_render_texture(tex, false, to_ram); + return buffer; + } + if (show_buffers) { // If show_buffers is true, just go ahead and call make_buffer(), // since it all amounts to the same thing anyway--this will @@ -784,6 +901,9 @@ begin_frame() { return false; } + // Track the size of some other graphics output, if desired. + auto_resize(); + if (needs_context()) { if (!make_context()) { return false; @@ -793,11 +913,11 @@ begin_frame() { // Okay, we already have a GSG, so activate it. make_current(); - if (_rtm_mode == RTM_bind_texture) { + if (_rtm_mode == RTM_bind_or_copy) { // Release the texture so we can render into the frame buffer. _gsg->framebuffer_release_texture(this, get_texture()); } - + _cube_map_index = -1; _cube_map_dr = NULL; @@ -856,10 +976,10 @@ end_frame() { PStatTimer timer(_copy_texture_pcollector); nassertv(has_texture()); - // If _rtm_mode is RTM_bind_texture, it means we should attempt to - // lock the framebuffer directly to the texture memory, avoiding + // If _rtm_mode is one of the bind-modes, it means we should attempt + // to lock the framebuffer directly to the texture memory, avoiding // the copy. - if (_rtm_mode == RTM_bind_texture) { + if (_rtm_mode == RTM_bind_or_copy) { if (display_cat.is_debug()) { display_cat.debug() << "Locking texture for " << get_name() << " at frame end.\n"; @@ -870,8 +990,8 @@ end_frame() { _rtm_mode = RTM_copy_texture; } } - - if (_rtm_mode != RTM_bind_texture) { + + if (_rtm_mode == RTM_copy_texture) { if (display_cat.is_debug()) { display_cat.debug() << "Copying texture for " << get_name() << " at frame end.\n"; @@ -922,7 +1042,7 @@ end_frame() { // If we were rendering directly to texture, we can't delete the // buffer until the texture is gone too. - if (_rtm_mode == RTM_bind_texture) { + if (_rtm_mode == RTM_bind_or_copy) { _hold_texture = _texture; } } @@ -959,7 +1079,7 @@ change_scenes(DisplayRegion *new_dr) { _cube_map_dr = new_dr; if (_rtm_mode != RTM_none) { - if (_rtm_mode == RTM_bind_texture) { + if (_rtm_mode == RTM_bind_or_copy) { // In render-to-texture mode, switch the rendering backend to // the new cube map face, so that the subsequent frame will be // rendered to the new face. @@ -1043,6 +1163,17 @@ release_gsg() { _gsg.clear(); } +//////////////////////////////////////////////////////////////////// +// Function: GraphicsOutput::auto_resize +// Access: Public, Virtual +// Description: Certain graphics outputs can automatically resize +// themselves to automatically stay the same size as +// some other graphics output. +//////////////////////////////////////////////////////////////////// +void GraphicsOutput:: +auto_resize() { +} + //////////////////////////////////////////////////////////////////// // Function: GraphicsOutput::begin_flip // Access: Public, Virtual diff --git a/panda/src/display/graphicsOutput.h b/panda/src/display/graphicsOutput.h index ad0fd7ba52..0e46f262ee 100644 --- a/panda/src/display/graphicsOutput.h +++ b/panda/src/display/graphicsOutput.h @@ -35,6 +35,7 @@ #include "drawMask.h" #include "pvector.h" #include "weakPointerTo.h" +#include "nodePath.h" class PNMImage; @@ -122,6 +123,8 @@ PUBLISHED: INLINE bool save_screenshot(const Filename &filename); INLINE bool get_screenshot(PNMImage &image); + NodePath get_texture_card(); + public: // These are not intended to be called directly by the user. INLINE bool needs_context() const; @@ -137,6 +140,8 @@ public: virtual void set_close_now(); virtual void reset_window(bool swapchain); + void set_size_and_recalc(int x, int y); + // It is an error to call any of the following methods from any // thread other than the draw thread. These methods are normally // called by the GraphicsEngine. @@ -152,7 +157,8 @@ public: virtual bool make_context(); virtual void make_current(); virtual void release_gsg(); - + virtual void auto_resize(); + // These methods will be called within the app (main) thread. virtual void begin_flip(); virtual void end_flip(); @@ -165,8 +171,7 @@ public: protected: enum RenderTextureMode { RTM_none, - RTM_bind_texture, - RTM_bind_if_possible, + RTM_bind_or_copy, RTM_copy_texture, RTM_copy_ram, }; @@ -180,6 +185,7 @@ protected: bool _needs_context; int _cube_map_index; DisplayRegion *_cube_map_dr; + PT(Geom) _texture_card; private: DisplayRegion *add_display_region(DisplayRegion *display_region); @@ -188,7 +194,7 @@ private: INLINE void determine_display_regions() const; void do_determine_display_regions(); - + int _sort; unsigned int _internal_sort_index; diff --git a/panda/src/display/graphicsWindow.cxx b/panda/src/display/graphicsWindow.cxx index 808c949549..6f73a0d507 100644 --- a/panda/src/display/graphicsWindow.cxx +++ b/panda/src/display/graphicsWindow.cxx @@ -541,18 +541,9 @@ set_properties_now(WindowProperties &properties) { if (open_window()) { // When the window is first opened, force its size to be // broadcast to its display regions. - _x_size = _properties.get_x_size(); - _y_size = _properties.get_y_size(); - _has_size = true; _is_valid = true; - - TotalDisplayRegions::iterator dri; - for (dri = _total_display_regions.begin(); - dri != _total_display_regions.end(); - ++dri) { - (*dri)->compute_pixels(_x_size, _y_size); - } - + set_size_and_recalc(_properties.get_x_size(), + _properties.get_y_size()); } else { // Since we can't even open the window, tag the // _rejected_properties with all of the window properties that @@ -715,18 +706,9 @@ system_changed_size(int x_size, int y_size) { display_cat.debug() << "system_changed_size(" << x_size << ", " << y_size << ")\n"; } - + if (x_size != _properties.get_x_size() || y_size != _properties.get_y_size()) { - _x_size = x_size; - _y_size = y_size; - _has_size = true; - - TotalDisplayRegions::iterator dri; - for (dri = _total_display_regions.begin(); - dri != _total_display_regions.end(); - ++dri) { - (*dri)->compute_pixels(_x_size, _y_size); - } + set_size_and_recalc(x_size, y_size); } } diff --git a/panda/src/display/parasiteBuffer.cxx b/panda/src/display/parasiteBuffer.cxx index 987e769523..b942e46e95 100644 --- a/panda/src/display/parasiteBuffer.cxx +++ b/panda/src/display/parasiteBuffer.cxx @@ -44,13 +44,20 @@ ParasiteBuffer(GraphicsOutput *host, const string &name, << " on " << _host->get_name() << "\n"; } + if ((x_size == 0)&&(y_size == 0)) { + _track_host_size = true; + x_size = host->get_x_size(); + y_size = host->get_y_size(); + } else { + _track_host_size = false; + } + _x_size = x_size; _y_size = y_size; _has_size = true; _default_display_region->compute_pixels(_x_size, _y_size); - _is_valid = true; - + nassertv(_x_size <= host->get_x_size() && _y_size <= host->get_y_size()); } @@ -100,3 +107,22 @@ void ParasiteBuffer:: make_current() { _host->make_current(); } + +//////////////////////////////////////////////////////////////////// +// Function: ParasiteBuffer::auto_resize +// Access: Public, Virtual +// Description: This function will be called within the draw thread +// to make sure this buffer is the right size. If not, +// it will be resized. +//////////////////////////////////////////////////////////////////// +void ParasiteBuffer:: +auto_resize() { + if (_track_host_size) { + _host->auto_resize(); + if ((_host->get_x_size() != _x_size)|| + (_host->get_y_size() != _y_size)) { + set_size_and_recalc(_host->get_x_size(), + _host->get_y_size()); + } + } +} diff --git a/panda/src/display/parasiteBuffer.h b/panda/src/display/parasiteBuffer.h index 7dd3e20871..6a8f62c542 100644 --- a/panda/src/display/parasiteBuffer.h +++ b/panda/src/display/parasiteBuffer.h @@ -56,7 +56,7 @@ class EXPCL_PANDA ParasiteBuffer : public GraphicsOutput { public: ParasiteBuffer(GraphicsOutput *host, const string &name, int x_size, int y_size); - + PUBLISHED: virtual ~ParasiteBuffer(); @@ -65,9 +65,11 @@ PUBLISHED: public: virtual GraphicsOutput *get_host(); virtual void make_current(); + virtual void auto_resize(); private: PT(GraphicsOutput) _host; + bool _track_host_size; public: static TypeHandle get_class_type() { diff --git a/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx b/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx index c56d3f3814..457de7b34d 100644 --- a/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx +++ b/panda/src/dxgsg8/dxGraphicsStateGuardian8.cxx @@ -1321,16 +1321,19 @@ end_draw_primitives() { // copy. //////////////////////////////////////////////////////////////////// void DXGraphicsStateGuardian8:: -framebuffer_copy_to_texture(Texture *tex, int z, const DisplayRegion *dr, const RenderBuffer &rb) { +framebuffer_copy_to_texture(Texture *tex, int z, const DisplayRegion *dr, + const RenderBuffer &rb) { set_read_buffer(rb); + int orig_x = tex->get_x_size(); + int orig_y = tex->get_y_size(); + HRESULT hr; int xo, yo, w, h; dr->get_region_pixels_i(xo, yo, w, h); - - tex->set_x_size(w); - tex->set_y_size(h); - + tex->set_x_size(Texture::up_to_power_2(w)); + tex->set_y_size(Texture::up_to_power_2(h)); + TextureContext *tc = tex->prepare_now(get_prepared_objects(), this); if (tc == (TextureContext *)NULL) { return; @@ -1345,13 +1348,54 @@ framebuffer_copy_to_texture(Texture *tex, int z, const DisplayRegion *dr, const } nassertv(dtc->get_d3d_2d_texture() != NULL); - IDirect3DSurface8 *tex_level_0, *render_target; + IDirect3DSurface8 *tex_level_0; hr = dtc->get_d3d_2d_texture()->GetSurfaceLevel(0, &tex_level_0); if (FAILED(hr)) { dxgsg8_cat.error() << "GetSurfaceLev failed in copy_texture" << D3DERRORSTRING(hr); return; } + // If the texture is the wrong size, we need to do something about it. + D3DSURFACE_DESC texdesc; + hr = tex_level_0->GetDesc(&texdesc); + if (FAILED(hr)) { + dxgsg8_cat.error() << "GetDesc failed in copy_texture" << D3DERRORSTRING(hr); + SAFE_RELEASE(tex_level_0); + return; + } + if ((texdesc.Width != tex->get_x_size())||(texdesc.Height != tex->get_y_size())) { + if ((orig_x != tex->get_x_size()) || (orig_y != tex->get_y_size())) { + // Texture might be wrong size because we resized it and need to recreate. + SAFE_RELEASE(tex_level_0); + if (!dtc->create_texture(*_screen)) { + // Oops, we can't re-create the texture for some reason. + dxgsg8_cat.error() + << "Unable to re-create texture " << *dtc->_texture << endl; + return; + } + hr = dtc->get_d3d_2d_texture()->GetSurfaceLevel(0, &tex_level_0); + if (FAILED(hr)) { + dxgsg8_cat.error() << "GetSurfaceLev failed in copy_texture" << D3DERRORSTRING(hr); + return; + } + hr = tex_level_0->GetDesc(&texdesc); + if (FAILED(hr)) { + dxgsg8_cat.error() << "GetDesc 2 failed in copy_texture" << D3DERRORSTRING(hr); + SAFE_RELEASE(tex_level_0); + return; + } + } + if ((texdesc.Width != tex->get_x_size())||(texdesc.Height != tex->get_y_size())) { + // If it's still the wrong size, it's because driver can't create size + // that we want. In that case, there's no helping it, we have to give up. + dxgsg8_cat.error() + << "Unable to copy to texture, texture is wrong size: " << *dtc->_texture << endl; + SAFE_RELEASE(tex_level_0); + return; + } + } + + IDirect3DSurface8 *render_target; hr = _d3d_device->GetRenderTarget(&render_target); if (FAILED(hr)) { dxgsg8_cat.error() << "GetRenderTgt failed in copy_texture" << D3DERRORSTRING(hr); diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx index ea1c91535f..9f23efb94b 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.cxx +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.cxx @@ -565,6 +565,51 @@ reset() { } } + _supports_framebuffer_object = false; + if (has_extension("GL_EXT_framebuffer_object")) { + _supports_framebuffer_object = true; + _glIsRenderbuffer = (PFNGLISRENDERBUFFEREXTPROC) + get_extension_func(GLPREFIX_QUOTED, "IsRenderbufferEXT"); + _glBindRenderbuffer = (PFNGLBINDRENDERBUFFEREXTPROC) + get_extension_func(GLPREFIX_QUOTED, "BindRenderbufferEXT"); + _glDeleteRenderbuffers = (PFNGLDELETERENDERBUFFERSEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "DeleteRenderbuffersEXT"); + _glGenRenderbuffers = (PFNGLGENRENDERBUFFERSEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "GenRenderbuffersEXT"); + _glRenderbufferStorage = (PFNGLRENDERBUFFERSTORAGEEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "RenderbufferStorageEXT"); + _glGetRenderbufferParameteriv = (PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "GetRenderbufferParameterivEXT"); + _glIsFramebuffer = (PFNGLISFRAMEBUFFEREXTPROC) + get_extension_func(GLPREFIX_QUOTED, "IsFramebufferEXT"); + _glBindFramebuffer = (PFNGLBINDFRAMEBUFFEREXTPROC) + get_extension_func(GLPREFIX_QUOTED, "BindFramebufferEXT"); + _glDeleteFramebuffers = (PFNGLDELETEFRAMEBUFFERSEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "DeleteFramebuffersEXT"); + _glGenFramebuffers = (PFNGLGENFRAMEBUFFERSEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "GenFramebuffersEXT"); + _glCheckFramebufferStatus = (PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "CheckFramebufferStatusEXT"); + _glFramebufferTexture1D = (PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "FramebufferTexture1DEXT"); + _glFramebufferTexture2D = (PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "FramebufferTexture2DEXT"); + _glFramebufferTexture3D = (PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "FramebufferTexture3DEXT"); + _glFramebufferRenderbuffer = (PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) + get_extension_func(GLPREFIX_QUOTED, "FramebufferRenderbufferEXT"); + _glGetFramebufferAttachmentParameteriv = (PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "GetFramebufferAttachmentParameterivEXT"); + _glGenerateMipmap = (PFNGLGENERATEMIPMAPEXTPROC) + get_extension_func(GLPREFIX_QUOTED, "GenerateMipmapEXT"); + } + + _glDrawBuffers = NULL; + if (has_extension("GL_ARB_draw_buffers")) { + _glDrawBuffers = (PFNGLDRAWBUFFERSARBPROC) + get_extension_func(GLPREFIX_QUOTED, "DrawBuffersARB"); + } + _glBlendEquation = NULL; bool supports_blend_equation = false; if (is_at_least_version(1, 2)) { @@ -831,7 +876,7 @@ reset() { //////////////////////////////////////////////////////////////////// -// Function: GLGraphicsStateGuardian::clear +// Function: GLGraphicsStateGuardian::do_clear // Access: Public, Virtual // Description: Clears all of the indicated buffers to their assigned // colors. @@ -2388,10 +2433,26 @@ framebuffer_copy_to_texture(Texture *tex, int z, const DisplayRegion *dr, int xo, yo, w, h; dr->get_region_pixels(xo, yo, w, h); + tex->set_x_size(Texture::up_to_power_2(w)); + tex->set_y_size(Texture::up_to_power_2(h)); + + // Sanity check everything. + if (z >= 0) { + if (!_supports_cube_map) { + return; + } + nassertv(z < 6); + nassertv(tex->get_texture_type() == Texture::TT_cube_map); + if ((w != tex->get_x_size()) || + (h != tex->get_y_size()) || + (w != h)) { + return; + } + } else { + nassertv(tex->get_texture_type() == Texture::TT_2d_texture); + } - tex->set_x_size(w); - tex->set_y_size(h); - + // Match framebuffer format if necessary. if (tex->get_match_framebuffer_format()) { const FrameBufferProperties &properties = get_properties(); int mode = properties.get_frame_buffer_mode(); @@ -2414,37 +2475,39 @@ framebuffer_copy_to_texture(Texture *tex, int z, const DisplayRegion *dr, TextureContext *tc = tex->prepare_now(get_prepared_objects(), this); nassertv(tc != (TextureContext *)NULL); - CLP(TextureContext) *gtc = DCAST(CLP(TextureContext), tc); GLenum target = get_texture_target(tex->get_texture_type()); - if (target == GL_NONE) { - // Invalid texture, can't copy to it. - return; - } GLP(BindTexture)(target, gtc->_index); + GLint internal_format = get_internal_image_format(tex->get_format()); + GLenum imagetarget = (z >= 0) ? (GL_TEXTURE_CUBE_MAP_POSITIVE_X + z) : GL_TEXTURE_2D; + + // If the texture has never been uploaded before, create it. + // We cannot use glCopyTexImage2D to create a texture that may be + // larger than the screen, so use glTexImage2D with arbitrary data. + + if ((gtc->_already_applied == false)|| + (gtc->_internal_format != internal_format)|| + (gtc->_width != tex->get_x_size())|| + (gtc->_height != tex->get_y_size())|| + (gtc->_depth != 1)) { - if (z >= 0) { - // Copy to a cube map face. - nassertv(z < 6); - nassertv(tex->get_texture_type() == Texture::TT_cube_map); - - if (_supports_cube_map) { - // We cleverly defined the cube map faces to fall in the same - // order as the GL constants are defined, so we can just make this - // simple addition to get to the right GL constant. - GLP(CopyTexImage2D)(GL_TEXTURE_CUBE_MAP_POSITIVE_X + z, 0, - get_internal_image_format(tex->get_format()), - xo, yo, w, h, 0); - } - - } else { - // Copy to a regular texture. - nassertv(tex->get_texture_type() == Texture::TT_2d_texture); - GLP(CopyTexImage2D)(GL_TEXTURE_2D, 0, - get_internal_image_format(tex->get_format()), - xo, yo, w, h, 0); + char *image = new char[tex->get_x_size() * tex->get_y_size()]; + memset(image, 128, tex->get_x_size() * tex->get_y_size()); + GLP(TexImage2D)(imagetarget, 0, internal_format, + tex->get_x_size(), tex->get_y_size(), 0, + GL_LUMINANCE, GL_UNSIGNED_BYTE, image); + delete image; + + gtc->_already_applied = true; + gtc->_internal_format = internal_format; + gtc->_width = tex->get_x_size(); + gtc->_height = tex->get_y_size(); + gtc->_depth = 1; } - + + // Copy the pixel data from the frame buffer. + GLP(CopyTexSubImage2D)(imagetarget, 0, 0, 0, xo, yo, w, h); + report_my_gl_errors(); // Force reload of texture state, since we've just monkeyed with it. diff --git a/panda/src/glstuff/glGraphicsStateGuardian_src.h b/panda/src/glstuff/glGraphicsStateGuardian_src.h index f8b34038ea..a6594543af 100644 --- a/panda/src/glstuff/glGraphicsStateGuardian_src.h +++ b/panda/src/glstuff/glGraphicsStateGuardian_src.h @@ -380,6 +380,27 @@ public: PFNGLBLENDEQUATIONPROC _glBlendEquation; PFNGLBLENDCOLORPROC _glBlendColor; + bool _supports_framebuffer_object; + PFNGLISRENDERBUFFEREXTPROC _glIsRenderbuffer; + PFNGLBINDRENDERBUFFEREXTPROC _glBindRenderbuffer; + PFNGLDELETERENDERBUFFERSEXTPROC _glDeleteRenderbuffers; + PFNGLGENRENDERBUFFERSEXTPROC _glGenRenderbuffers; + PFNGLRENDERBUFFERSTORAGEEXTPROC _glRenderbufferStorage; + PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC _glGetRenderbufferParameteriv; + PFNGLISFRAMEBUFFEREXTPROC _glIsFramebuffer; + PFNGLBINDFRAMEBUFFEREXTPROC _glBindFramebuffer; + PFNGLDELETEFRAMEBUFFERSEXTPROC _glDeleteFramebuffers; + PFNGLGENFRAMEBUFFERSEXTPROC _glGenFramebuffers; + PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC _glCheckFramebufferStatus; + PFNGLFRAMEBUFFERTEXTURE1DEXTPROC _glFramebufferTexture1D; + PFNGLFRAMEBUFFERTEXTURE2DEXTPROC _glFramebufferTexture2D; + PFNGLFRAMEBUFFERTEXTURE3DEXTPROC _glFramebufferTexture3D; + PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC _glFramebufferRenderbuffer; + PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC _glGetFramebufferAttachmentParameteriv; + PFNGLGENERATEMIPMAPEXTPROC _glGenerateMipmap; + + PFNGLDRAWBUFFERSARBPROC _glDrawBuffers; + GLenum _edge_clamp; GLenum _border_clamp; GLenum _mirror_repeat; diff --git a/panda/src/glstuff/glShaderContext_src.cxx b/panda/src/glstuff/glShaderContext_src.cxx index 06e2004472..3550d4153e 100755 --- a/panda/src/glstuff/glShaderContext_src.cxx +++ b/panda/src/glstuff/glShaderContext_src.cxx @@ -244,7 +244,6 @@ bind(GSG *gsg) { // Pass in k-parameters and transform-parameters issue_parameters(gsg); - issue_transform(gsg); // Bind the shaders. cgGLEnableProfile(_cg_profile[SHADER_type_vert]); @@ -271,13 +270,62 @@ unbind() #endif } +//////////////////////////////////////////////////////////////////// +// Function: GLShaderContext::issue_cg_auto_bind +// Access: Public +// Description: Pass a single system parameter into the shader. +//////////////////////////////////////////////////////////////////// +#ifdef HAVE_CGGL +void CLP(ShaderContext):: +issue_cg_auto_bind(const ShaderAutoBind &bind, GSG *gsg) +{ + LVecBase4f t; + + CGparameter p = bind.parameter; + switch(bind.value) { + case SIC_mat_modelview: + case SIC_inv_modelview: + case SIC_tps_modelview: + case SIC_itp_modelview: + case SIC_mat_projection: + case SIC_inv_projection: + case SIC_tps_projection: + case SIC_itp_projection: + case SIC_mat_texture: + case SIC_inv_texture: + case SIC_tps_texture: + case SIC_itp_texture: + case SIC_mat_modelproj: + case SIC_inv_modelproj: + case SIC_tps_modelproj: + case SIC_itp_modelproj: + cgGLSetStateMatrixParameter(p, (CGGLenum)((bind.value >> 2)+4), (CGGLenum)(bind.value & 3)); + return; + case SIC_sys_windowsize: + t[0] = gsg->_current_display_region->get_pixel_width(); + t[1] = gsg->_current_display_region->get_pixel_height(); + t[2] = 1; + t[3] = 1; + cgGLSetParameter4fv(p, t.get_data()); + return; + case SIC_sys_pixelsize: + t[0] = 1.0 / gsg->_current_display_region->get_pixel_width(); + t[1] = 1.0 / gsg->_current_display_region->get_pixel_height(); + t[2] = 1; + t[3] = 1; + cgGLSetParameter4fv(p, t.get_data()); + return; + } +} +#endif + //////////////////////////////////////////////////////////////////// // Function: GLShaderContext::issue_parameters // Access: Public -// Description: This function is to be called whenever -// the RenderState has changed, but the ShaderExpansion -// has not changed. It loads the new input parameters -// into the already-bound shader. +// Description: This function gets called whenever the RenderState +// has changed, but the ShaderExpansion itself has not +// changed. It loads new parameters into the +// already-bound shader. //////////////////////////////////////////////////////////////////// void CLP(ShaderContext):: issue_parameters(GSG *gsg) @@ -304,24 +352,27 @@ issue_parameters(GSG *gsg) cgGLSetMatrixParameterfc(_cg_npbind[i].parameter, dat); } + // Pass in system parameters + for (int i=0; i<(int)_cg_auto_param.size(); i++) { + issue_cg_auto_bind(_cg_auto_param[i], gsg); + } + // Pass in trans,tpose,row,col,xvec,yvec,zvec,pos parameters - for (int i=0; i<(int)_cg_parameter_bind.size(); i++) + for (int i=0; i<(int)_cg_parameter_bind.size(); i++) { bind_cg_transform(_cg_parameter_bind[i], gsg); - - // Pass in trans,tpose,row,col,xvec,yvec,zvec,pos parameters - for (int i=0; i<(int)_cg_transform_bind.size(); i++) - bind_cg_transform(_cg_transform_bind[i], gsg); + } } #endif + issue_transform(gsg); } //////////////////////////////////////////////////////////////////// // Function: GLShaderContext::issue_transform // Access: Public -// Description: This function is to be called whenever -// the external_transform has changed, but the -// ShaderExpansion itself has not changed. It loads the -// new transform into the already-bound shader. +// Description: This function gets called whenever the RenderState +// or the TransformState has changed, but the +// ShaderExpansion itself has not changed. It loads +// new parameters into the already-bound shader. //////////////////////////////////////////////////////////////////// void CLP(ShaderContext):: issue_transform(GSG *gsg) @@ -329,14 +380,13 @@ issue_transform(GSG *gsg) #ifdef HAVE_CGGL if (_cg_context != 0) { // Pass in modelview, projection, etc. - for (int i=0; i<(int)_cg_autobind.size(); i++) - cgGLSetStateMatrixParameter(_cg_autobind[i].parameter, - _cg_autobind[i].matrix, - _cg_autobind[i].orient); - + for (int i=0; i<(int)_cg_auto_trans.size(); i++) { + issue_cg_auto_bind(_cg_auto_trans[i], gsg); + } // Pass in trans,tpose,row,col,xvec,yvec,zvec,pos parameters - for (int i=0; i<(int)_cg_transform_bind.size(); i++) + for (int i=0; i<(int)_cg_transform_bind.size(); i++) { bind_cg_transform(_cg_transform_bind[i], gsg); + } } #endif } @@ -513,13 +563,14 @@ update_shader_texture_bindings(CLP(ShaderContext) *prev, GSG *gsg) void CLP(ShaderContext):: bind_cg_transform(const ShaderTransBind &stb, GSG *gsg) { + const float *data; CPT(TransformState) src; CPT(TransformState) rel; if (stb.src_name == InternalName::get_camera()) { src = TransformState::make_identity(); } else if (stb.src_name == InternalName::get_view()) { - src = gsg->_cs_transform; + src = gsg->_inv_cs_transform; } else if (stb.src_name == InternalName::get_model()) { src = gsg->get_transform(); } else if (stb.src_name == InternalName::get_world()) { @@ -536,8 +587,8 @@ bind_cg_transform(const ShaderTransBind &stb, GSG *gsg) if (stb.rel_name == InternalName::get_camera()) { rel = TransformState::make_identity(); - } else if (stb.src_name == InternalName::get_view()) { - rel = gsg->_cs_transform; + } else if (stb.rel_name == InternalName::get_view()) { + rel = gsg->_inv_cs_transform; } else if (stb.rel_name == InternalName::get_model()) { rel = gsg->get_transform(); } else if (stb.rel_name == InternalName::get_world()) { @@ -553,13 +604,39 @@ bind_cg_transform(const ShaderTransBind &stb, GSG *gsg) } CPT(TransformState) total = rel->invert_compose(src); - const float *data = total->get_mat().get_data(); - // cerr << "Input for " << cgGetParameterName(stb.parameter) << " is\n" << + + // data = src->get_mat().get_data(); + // cerr << "Src for " << cgGetParameterName(stb.parameter) << " is\n" << + // data[ 0] << " " << data[ 1] << " " << data[ 2] << " " << data[ 3] << "\n" << + // data[ 4] << " " << data[ 5] << " " << data[ 6] << " " << data[ 7] << "\n" << + // data[ 8] << " " << data[ 9] << " " << data[10] << " " << data[11] << "\n" << + // data[12] << " " << data[13] << " " << data[14] << " " << data[15] << "\n"; + // data = rel->get_mat().get_data(); + // cerr << "Rel for " << cgGetParameterName(stb.parameter) << " is\n" << + // data[ 0] << " " << data[ 1] << " " << data[ 2] << " " << data[ 3] << "\n" << + // data[ 4] << " " << data[ 5] << " " << data[ 6] << " " << data[ 7] << "\n" << + // data[ 8] << " " << data[ 9] << " " << data[10] << " " << data[11] << "\n" << + // data[12] << " " << data[13] << " " << data[14] << " " << data[15] << "\n"; + // data = total->get_mat().get_data(); + // cerr << "Total for " << cgGetParameterName(stb.parameter) << " is\n" << + // data[ 0] << " " << data[ 1] << " " << data[ 2] << " " << data[ 3] << "\n" << + // data[ 4] << " " << data[ 5] << " " << data[ 6] << " " << data[ 7] << "\n" << + // data[ 8] << " " << data[ 9] << " " << data[10] << " " << data[11] << "\n" << + // data[12] << " " << data[13] << " " << data[14] << " " << data[15] << "\n"; + // data = gsg->_cs_transform->get_mat().get_data(); + // cerr << "cs_transform is\n" << + // data[ 0] << " " << data[ 1] << " " << data[ 2] << " " << data[ 3] << "\n" << + // data[ 4] << " " << data[ 5] << " " << data[ 6] << " " << data[ 7] << "\n" << + // data[ 8] << " " << data[ 9] << " " << data[10] << " " << data[11] << "\n" << + // data[12] << " " << data[13] << " " << data[14] << " " << data[15] << "\n"; + // data = gsg->_internal_transform->get_mat().get_data(); + // cerr << "internal_transform is\n" << // data[ 0] << " " << data[ 1] << " " << data[ 2] << " " << data[ 3] << "\n" << // data[ 4] << " " << data[ 5] << " " << data[ 6] << " " << data[ 7] << "\n" << // data[ 8] << " " << data[ 9] << " " << data[10] << " " << data[11] << "\n" << // data[12] << " " << data[13] << " " << data[14] << " " << data[15] << "\n"; + data = total->get_mat().get_data(); switch (stb.trans_piece) { case SHADER_data_matrix: cgGLSetMatrixParameterfc(stb.parameter, data); break; case SHADER_data_transpose: cgGLSetMatrixParameterfr(stb.parameter, data); break; @@ -894,9 +971,11 @@ compile_cg_parameter(CGparameter p) bind.parameter = p; if (pieces[0]=="wstrans") { bind.rel_name = InternalName::get_world(); bind.trans_piece = SHADER_data_matrix; } + else if (pieces[0]=="vstrans") { bind.rel_name = InternalName::get_view(); bind.trans_piece = SHADER_data_matrix; } else if (pieces[0]=="cstrans") { bind.rel_name = InternalName::get_camera(); bind.trans_piece = SHADER_data_matrix; } else if (pieces[0]=="mstrans") { bind.rel_name = InternalName::get_model(); bind.trans_piece = SHADER_data_matrix; } else if (pieces[0]=="wspos") { bind.rel_name = InternalName::get_world(); bind.trans_piece = SHADER_data_row3; } + else if (pieces[0]=="vspos") { bind.rel_name = InternalName::get_view(); bind.trans_piece = SHADER_data_row3; } else if (pieces[0]=="cspos") { bind.rel_name = InternalName::get_camera(); bind.trans_piece = SHADER_data_row3; } else if (pieces[0]=="mspos") { bind.rel_name = InternalName::get_model(); bind.trans_piece = SHADER_data_row3; } @@ -926,22 +1005,51 @@ compile_cg_parameter(CGparameter p) return false; ShaderAutoBind bind; bind.parameter = p; - if (pieces[1] == "modelview") bind.matrix = CG_GL_MODELVIEW_MATRIX; - else if (pieces[1] == "projection") bind.matrix = CG_GL_PROJECTION_MATRIX; - else if (pieces[1] == "texmatrix") bind.matrix = CG_GL_TEXTURE_MATRIX; - else if (pieces[1] == "modelproj") bind.matrix = CG_GL_MODELVIEW_PROJECTION_MATRIX; + bind.value = 0; + if (pieces[1] == "modelview") bind.value += 0; + else if (pieces[1] == "projection") bind.value += 4; + else if (pieces[1] == "texmatrix") bind.value += 8; + else if (pieces[1] == "modelproj") bind.value += 12; else { errchk_cg_output(p, "unrecognized matrix name"); return false; } - if (pieces[0]=="mat") bind.orient = CG_GL_MATRIX_IDENTITY; - else if (pieces[0]=="inv") bind.orient = CG_GL_MATRIX_INVERSE; - else if (pieces[0]=="tps") bind.orient = CG_GL_MATRIX_TRANSPOSE; - else if (pieces[0]=="itp") bind.orient = CG_GL_MATRIX_INVERSE_TRANSPOSE; - _cg_autobind.push_back(bind); + if (pieces[0]=="mat") bind.value += 0; + else if (pieces[0]=="inv") bind.value += 1; + else if (pieces[0]=="tps") bind.value += 2; + else if (pieces[0]=="itp") bind.value += 3; + _cg_auto_trans.push_back(bind); return true; } + if (pieces[0] == "sys") { + if ((!errchk_cg_parameter_words(p,2)) || + (!errchk_cg_parameter_direction(p, CG_IN)) || + (!errchk_cg_parameter_variance(p, CG_UNIFORM))) { + return false; + } + ShaderAutoBind bind; + bind.parameter = p; + if (pieces[1] == "pixelsize") { + if (!errchk_cg_parameter_type(p, CG_FLOAT2)) { + return false; + } + bind.value = SIC_sys_pixelsize; + _cg_auto_param.push_back(bind); + return true; + } + if (pieces[1] == "windowsize") { + if (!errchk_cg_parameter_type(p, CG_FLOAT2)) { + return false; + } + bind.value = SIC_sys_windowsize; + _cg_auto_param.push_back(bind); + return true; + } + errchk_cg_output(p,"unknown system parameter"); + return false; + } + if (pieces[0] == "tex") { if ((!errchk_cg_parameter_direction(p, CG_IN)) || (!errchk_cg_parameter_variance(p, CG_UNIFORM)) || diff --git a/panda/src/glstuff/glShaderContext_src.h b/panda/src/glstuff/glShaderContext_src.h index b5828634b8..7dafea4bca 100755 --- a/panda/src/glstuff/glShaderContext_src.h +++ b/panda/src/glstuff/glShaderContext_src.h @@ -51,10 +51,32 @@ public: private: #ifdef HAVE_CGGL + enum ShaderAutoValue { + // This first batch of constants cleverly lines up + // with the Cg constant values. Don't insert anything. + SIC_mat_modelview, + SIC_inv_modelview, + SIC_tps_modelview, + SIC_itp_modelview, + SIC_mat_projection, + SIC_inv_projection, + SIC_tps_projection, + SIC_itp_projection, + SIC_mat_texture, + SIC_inv_texture, + SIC_tps_texture, + SIC_itp_texture, + SIC_mat_modelproj, + SIC_inv_modelproj, + SIC_tps_modelproj, + SIC_itp_modelproj, + // From this point forward, it's okay to insert stuff. + SIC_sys_windowsize, + SIC_sys_pixelsize, + }; struct ShaderAutoBind { CGparameter parameter; - CGGLenum matrix; - CGGLenum orient; + int value; }; struct ShaderArgBind { CGparameter parameter; @@ -85,7 +107,8 @@ private: // These arrays contain lists of "bindings." They // tell us how to fill the shader's input parameters. - vector _cg_autobind; + vector _cg_auto_trans; + vector _cg_auto_param; vector _cg_fbind; vector _cg_npbind; vector _cg_texbind; @@ -98,6 +121,7 @@ private: CLP(GraphicsStateGuardian) *gsg); void suggest_cg_profile(const string &vpro, const string &fpro); CGprofile parse_cg_profile(const string &id, bool vertex); + void issue_cg_auto_bind(const ShaderAutoBind &bind, GSG *gsg); bool compile_cg_parameter(CGparameter p); bool errchk_cg_parameter_words(CGparameter p, int len); bool errchk_cg_parameter_direction(CGparameter p, CGenum dir); diff --git a/panda/src/glstuff/panda_glext.h b/panda/src/glstuff/panda_glext.h index 79c93099a5..7bb8e6e7cc 100644 --- a/panda/src/glstuff/panda_glext.h +++ b/panda/src/glstuff/panda_glext.h @@ -1,10 +1,5 @@ -/* Additions by drose to re-include this glext.h even if an older - version has previously been included. */ -#if defined(GL_GLEXT_VERSION) && GL_GLEXT_VERSION < 21 - #undef GL_GLEXT_VERSION -#endif -#ifndef GL_GLEXT_VERSION - +#ifndef __glext_h_ +#define __glext_h_ #ifdef __cplusplus extern "C" { @@ -29,7 +24,7 @@ extern "C" { ** ** Original Code. The Original Code is: OpenGL Sample Implementation, ** Version 1.2.1, released January 26, 2000, developed by Silicon Graphics, -** Inc. The Original Code is Copyright (c) 1991-2002 Silicon Graphics, Inc. +** Inc. The Original Code is Copyright (c) 1991-2004 Silicon Graphics, Inc. ** Copyright in any portions created by third parties is as indicated ** elsewhere herein. All Rights Reserved. ** @@ -57,9 +52,9 @@ extern "C" { /*************************************************************/ /* Header file version number, required by OpenGL ABI for Linux */ -/* glext.h last updated 2003/1/12 */ +/* glext.h last updated 2005/06/20 */ /* Current version at http://oss.sgi.com/projects/ogl-sample/registry/ */ -#define GL_GLEXT_VERSION 21 +#define GL_GLEXT_VERSION 29 #ifndef GL_VERSION_1_2 #define GL_UNSIGNED_BYTE_3_3_2 0x8032 @@ -256,7 +251,6 @@ extern "C" { #define GL_NUM_COMPRESSED_TEXTURE_FORMATS 0x86A2 #define GL_COMPRESSED_TEXTURE_FORMATS 0x86A3 #define GL_CLAMP_TO_BORDER 0x812D -#define GL_CLAMP_TO_BORDER_SGIS 0x812D #define GL_COMBINE 0x8570 #define GL_COMBINE_RGB 0x8571 #define GL_COMBINE_ALPHA 0x8572 @@ -362,7 +356,7 @@ extern "C" { #define GL_DYNAMIC_READ 0x88E9 #define GL_DYNAMIC_COPY 0x88EA #define GL_SAMPLES_PASSED 0x8914 -#define GL_FOG_COORD_SOURCE GL_FOG_COORDINATE_SOURCE +#define GL_FOG_COORD_SRC GL_FOG_COORDINATE_SOURCE #define GL_FOG_COORD GL_FOG_COORDINATE #define GL_CURRENT_FOG_COORD GL_CURRENT_FOG_COORDINATE #define GL_FOG_COORD_ARRAY_TYPE GL_FOG_COORDINATE_ARRAY_TYPE @@ -378,6 +372,93 @@ extern "C" { #define GL_SRC2_ALPHA GL_SOURCE2_ALPHA #endif +#ifndef GL_VERSION_2_0 +#define GL_BLEND_EQUATION_RGB GL_BLEND_EQUATION +#define GL_VERTEX_ATTRIB_ARRAY_ENABLED 0x8622 +#define GL_VERTEX_ATTRIB_ARRAY_SIZE 0x8623 +#define GL_VERTEX_ATTRIB_ARRAY_STRIDE 0x8624 +#define GL_VERTEX_ATTRIB_ARRAY_TYPE 0x8625 +#define GL_CURRENT_VERTEX_ATTRIB 0x8626 +#define GL_VERTEX_PROGRAM_POINT_SIZE 0x8642 +#define GL_VERTEX_PROGRAM_TWO_SIDE 0x8643 +#define GL_VERTEX_ATTRIB_ARRAY_POINTER 0x8645 +#define GL_STENCIL_BACK_FUNC 0x8800 +#define GL_STENCIL_BACK_FAIL 0x8801 +#define GL_STENCIL_BACK_PASS_DEPTH_FAIL 0x8802 +#define GL_STENCIL_BACK_PASS_DEPTH_PASS 0x8803 +#define GL_MAX_DRAW_BUFFERS 0x8824 +#define GL_DRAW_BUFFER0 0x8825 +#define GL_DRAW_BUFFER1 0x8826 +#define GL_DRAW_BUFFER2 0x8827 +#define GL_DRAW_BUFFER3 0x8828 +#define GL_DRAW_BUFFER4 0x8829 +#define GL_DRAW_BUFFER5 0x882A +#define GL_DRAW_BUFFER6 0x882B +#define GL_DRAW_BUFFER7 0x882C +#define GL_DRAW_BUFFER8 0x882D +#define GL_DRAW_BUFFER9 0x882E +#define GL_DRAW_BUFFER10 0x882F +#define GL_DRAW_BUFFER11 0x8830 +#define GL_DRAW_BUFFER12 0x8831 +#define GL_DRAW_BUFFER13 0x8832 +#define GL_DRAW_BUFFER14 0x8833 +#define GL_DRAW_BUFFER15 0x8834 +#define GL_BLEND_EQUATION_ALPHA 0x883D +#define GL_POINT_SPRITE 0x8861 +#define GL_COORD_REPLACE 0x8862 +#define GL_MAX_VERTEX_ATTRIBS 0x8869 +#define GL_VERTEX_ATTRIB_ARRAY_NORMALIZED 0x886A +#define GL_MAX_TEXTURE_COORDS 0x8871 +#define GL_MAX_TEXTURE_IMAGE_UNITS 0x8872 +#define GL_FRAGMENT_SHADER 0x8B30 +#define GL_VERTEX_SHADER 0x8B31 +#define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS 0x8B49 +#define GL_MAX_VERTEX_UNIFORM_COMPONENTS 0x8B4A +#define GL_MAX_VARYING_FLOATS 0x8B4B +#define GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS 0x8B4C +#define GL_MAX_COMBINED_TEXTURE_IMAGE_UNITS 0x8B4D +#define GL_SHADER_TYPE 0x8B4F +#define GL_FLOAT_VEC2 0x8B50 +#define GL_FLOAT_VEC3 0x8B51 +#define GL_FLOAT_VEC4 0x8B52 +#define GL_INT_VEC2 0x8B53 +#define GL_INT_VEC3 0x8B54 +#define GL_INT_VEC4 0x8B55 +#define GL_BOOL 0x8B56 +#define GL_BOOL_VEC2 0x8B57 +#define GL_BOOL_VEC3 0x8B58 +#define GL_BOOL_VEC4 0x8B59 +#define GL_FLOAT_MAT2 0x8B5A +#define GL_FLOAT_MAT3 0x8B5B +#define GL_FLOAT_MAT4 0x8B5C +#define GL_SAMPLER_1D 0x8B5D +#define GL_SAMPLER_2D 0x8B5E +#define GL_SAMPLER_3D 0x8B5F +#define GL_SAMPLER_CUBE 0x8B60 +#define GL_SAMPLER_1D_SHADOW 0x8B61 +#define GL_SAMPLER_2D_SHADOW 0x8B62 +#define GL_DELETE_STATUS 0x8B80 +#define GL_COMPILE_STATUS 0x8B81 +#define GL_LINK_STATUS 0x8B82 +#define GL_VALIDATE_STATUS 0x8B83 +#define GL_INFO_LOG_LENGTH 0x8B84 +#define GL_ATTACHED_SHADERS 0x8B85 +#define GL_ACTIVE_UNIFORMS 0x8B86 +#define GL_ACTIVE_UNIFORM_MAX_LENGTH 0x8B87 +#define GL_SHADER_SOURCE_LENGTH 0x8B88 +#define GL_ACTIVE_ATTRIBUTES 0x8B89 +#define GL_ACTIVE_ATTRIBUTE_MAX_LENGTH 0x8B8A +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT 0x8B8B +#define GL_SHADING_LANGUAGE_VERSION 0x8B8C +#define GL_CURRENT_PROGRAM 0x8B8D +#define GL_POINT_SPRITE_COORD_ORIGIN 0x8CA0 +#define GL_LOWER_LEFT 0x8CA1 +#define GL_UPPER_LEFT 0x8CA2 +#define GL_STENCIL_BACK_REF 0x8CA3 +#define GL_STENCIL_BACK_VALUE_MASK 0x8CA4 +#define GL_STENCIL_BACK_WRITEMASK 0x8CA5 +#endif + #ifndef GL_ARB_multitexture #define GL_TEXTURE0_ARB 0x84C0 #define GL_TEXTURE1_ARB 0x84C1 @@ -754,6 +835,14 @@ extern "C" { #define GL_FLOAT_MAT2_ARB 0x8B5A #define GL_FLOAT_MAT3_ARB 0x8B5B #define GL_FLOAT_MAT4_ARB 0x8B5C +#define GL_SAMPLER_1D_ARB 0x8B5D +#define GL_SAMPLER_2D_ARB 0x8B5E +#define GL_SAMPLER_3D_ARB 0x8B5F +#define GL_SAMPLER_CUBE_ARB 0x8B60 +#define GL_SAMPLER_1D_SHADOW_ARB 0x8B61 +#define GL_SAMPLER_2D_SHADOW_ARB 0x8B62 +#define GL_SAMPLER_2D_RECT_ARB 0x8B63 +#define GL_SAMPLER_2D_RECT_SHADOW_ARB 0x8B64 #define GL_OBJECT_DELETE_STATUS_ARB 0x8B80 #define GL_OBJECT_COMPILE_STATUS_ARB 0x8B81 #define GL_OBJECT_LINK_STATUS_ARB 0x8B82 @@ -778,9 +867,11 @@ extern "C" { #ifndef GL_ARB_fragment_shader #define GL_FRAGMENT_SHADER_ARB 0x8B30 #define GL_MAX_FRAGMENT_UNIFORM_COMPONENTS_ARB 0x8B49 +#define GL_FRAGMENT_SHADER_DERIVATIVE_HINT_ARB 0x8B8B #endif #ifndef GL_ARB_shading_language_100 +#define GL_SHADING_LANGUAGE_VERSION_ARB 0x8B8C #endif #ifndef GL_ARB_texture_non_power_of_two @@ -791,6 +882,78 @@ extern "C" { #define GL_COORD_REPLACE_ARB 0x8862 #endif +#ifndef GL_ARB_fragment_program_shadow +#endif + +#ifndef GL_ARB_draw_buffers +#define GL_MAX_DRAW_BUFFERS_ARB 0x8824 +#define GL_DRAW_BUFFER0_ARB 0x8825 +#define GL_DRAW_BUFFER1_ARB 0x8826 +#define GL_DRAW_BUFFER2_ARB 0x8827 +#define GL_DRAW_BUFFER3_ARB 0x8828 +#define GL_DRAW_BUFFER4_ARB 0x8829 +#define GL_DRAW_BUFFER5_ARB 0x882A +#define GL_DRAW_BUFFER6_ARB 0x882B +#define GL_DRAW_BUFFER7_ARB 0x882C +#define GL_DRAW_BUFFER8_ARB 0x882D +#define GL_DRAW_BUFFER9_ARB 0x882E +#define GL_DRAW_BUFFER10_ARB 0x882F +#define GL_DRAW_BUFFER11_ARB 0x8830 +#define GL_DRAW_BUFFER12_ARB 0x8831 +#define GL_DRAW_BUFFER13_ARB 0x8832 +#define GL_DRAW_BUFFER14_ARB 0x8833 +#define GL_DRAW_BUFFER15_ARB 0x8834 +#endif + +#ifndef GL_ARB_texture_rectangle +#define GL_TEXTURE_RECTANGLE_ARB 0x84F5 +#define GL_TEXTURE_BINDING_RECTANGLE_ARB 0x84F6 +#define GL_PROXY_TEXTURE_RECTANGLE_ARB 0x84F7 +#define GL_MAX_RECTANGLE_TEXTURE_SIZE_ARB 0x84F8 +#endif + +#ifndef GL_ARB_color_buffer_float +#define GL_RGBA_FLOAT_MODE_ARB 0x8820 +#define GL_CLAMP_VERTEX_COLOR_ARB 0x891A +#define GL_CLAMP_FRAGMENT_COLOR_ARB 0x891B +#define GL_CLAMP_READ_COLOR_ARB 0x891C +#define GL_FIXED_ONLY_ARB 0x891D +#endif + +#ifndef GL_ARB_half_float_pixel +#define GL_HALF_FLOAT_ARB 0x140B +#endif + +#ifndef GL_ARB_texture_float +#define GL_TEXTURE_RED_TYPE_ARB 0x8C10 +#define GL_TEXTURE_GREEN_TYPE_ARB 0x8C11 +#define GL_TEXTURE_BLUE_TYPE_ARB 0x8C12 +#define GL_TEXTURE_ALPHA_TYPE_ARB 0x8C13 +#define GL_TEXTURE_LUMINANCE_TYPE_ARB 0x8C14 +#define GL_TEXTURE_INTENSITY_TYPE_ARB 0x8C15 +#define GL_TEXTURE_DEPTH_TYPE_ARB 0x8C16 +#define GL_UNSIGNED_NORMALIZED_ARB 0x8C17 +#define GL_RGBA32F_ARB 0x8814 +#define GL_RGB32F_ARB 0x8815 +#define GL_ALPHA32F_ARB 0x8816 +#define GL_INTENSITY32F_ARB 0x8817 +#define GL_LUMINANCE32F_ARB 0x8818 +#define GL_LUMINANCE_ALPHA32F_ARB 0x8819 +#define GL_RGBA16F_ARB 0x881A +#define GL_RGB16F_ARB 0x881B +#define GL_ALPHA16F_ARB 0x881C +#define GL_INTENSITY16F_ARB 0x881D +#define GL_LUMINANCE16F_ARB 0x881E +#define GL_LUMINANCE_ALPHA16F_ARB 0x881F +#endif + +#ifndef GL_ARB_pixel_buffer_object +#define GL_PIXEL_PACK_BUFFER_ARB 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_ARB 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_ARB 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_ARB 0x88EF +#endif + #ifndef GL_EXT_abgr #define GL_ABGR_EXT 0x8000 #endif @@ -1121,6 +1284,10 @@ extern "C" { #define GL_CLAMP_TO_EDGE_SGIS 0x812F #endif +#ifndef GL_SGIS_texture_border_clamp +#define GL_CLAMP_TO_BORDER_SGIS 0x812D +#endif + #ifndef GL_EXT_blend_minmax #define GL_FUNC_ADD_EXT 0x8006 #define GL_MIN_EXT 0x8007 @@ -2664,6 +2831,11 @@ extern "C" { #define GL_DRAW_BUFFER15_ATI 0x8834 #endif +#ifndef GL_ATI_pixel_format_float +#define GL_TYPE_RGBA_FLOAT_ATI 0x8820 +#define GL_COLOR_CLEAR_UNCLAMPED_VALUE_ATI 0x8835 +#endif + #ifndef GL_ATI_texture_env_combine3 #define GL_MODULATE_ADD_ATI 0x8744 #define GL_MODULATE_SIGNED_ADD_ATI 0x8745 @@ -2750,6 +2922,11 @@ extern "C" { #ifndef GL_ATI_vertex_attrib_array_object #endif +#ifndef GL_OES_read_format +#define GL_IMPLEMENTATION_COLOR_READ_TYPE_OES 0x8B9A +#define GL_IMPLEMENTATION_COLOR_READ_FORMAT_OES 0x8B9B +#endif + #ifndef GL_EXT_depth_bounds_test #define GL_DEPTH_BOUNDS_TEST_EXT 0x8890 #define GL_DEPTH_BOUNDS_EXT 0x8891 @@ -2776,10 +2953,100 @@ extern "C" { #define GL_YCBCR_MESA 0x8757 #endif +#ifndef GL_EXT_pixel_buffer_object +#define GL_PIXEL_PACK_BUFFER_EXT 0x88EB +#define GL_PIXEL_UNPACK_BUFFER_EXT 0x88EC +#define GL_PIXEL_PACK_BUFFER_BINDING_EXT 0x88ED +#define GL_PIXEL_UNPACK_BUFFER_BINDING_EXT 0x88EF +#endif + +#ifndef GL_NV_fragment_program_option +#endif + +#ifndef GL_NV_fragment_program2 +#define GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV 0x88F4 +#define GL_MAX_PROGRAM_CALL_DEPTH_NV 0x88F5 +#define GL_MAX_PROGRAM_IF_DEPTH_NV 0x88F6 +#define GL_MAX_PROGRAM_LOOP_DEPTH_NV 0x88F7 +#define GL_MAX_PROGRAM_LOOP_COUNT_NV 0x88F8 +#endif + +#ifndef GL_NV_vertex_program2_option +/* reuse GL_MAX_PROGRAM_EXEC_INSTRUCTIONS_NV */ +/* reuse GL_MAX_PROGRAM_CALL_DEPTH_NV */ +#endif + +#ifndef GL_NV_vertex_program3 +/* reuse GL_MAX_VERTEX_TEXTURE_IMAGE_UNITS_ARB */ +#endif + +#ifndef GL_EXT_framebuffer_object +#define GL_INVALID_FRAMEBUFFER_OPERATION_EXT 0x0506 +#define GL_MAX_RENDERBUFFER_SIZE_EXT 0x84E8 +#define GL_FRAMEBUFFER_BINDING_EXT 0x8CA6 +#define GL_RENDERBUFFER_BINDING_EXT 0x8CA7 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_TYPE_EXT 0x8CD0 +#define GL_FRAMEBUFFER_ATTACHMENT_OBJECT_NAME_EXT 0x8CD1 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_LEVEL_EXT 0x8CD2 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_CUBE_MAP_FACE_EXT 0x8CD3 +#define GL_FRAMEBUFFER_ATTACHMENT_TEXTURE_3D_ZOFFSET_EXT 0x8CD4 +#define GL_FRAMEBUFFER_COMPLETE_EXT 0x8CD5 +#define GL_FRAMEBUFFER_INCOMPLETE_ATTACHMENT_EXT 0x8CD6 +#define GL_FRAMEBUFFER_INCOMPLETE_MISSING_ATTACHMENT_EXT 0x8CD7 +#define GL_FRAMEBUFFER_INCOMPLETE_DUPLICATE_ATTACHMENT_EXT 0x8CD8 +#define GL_FRAMEBUFFER_INCOMPLETE_DIMENSIONS_EXT 0x8CD9 +#define GL_FRAMEBUFFER_INCOMPLETE_FORMATS_EXT 0x8CDA +#define GL_FRAMEBUFFER_INCOMPLETE_DRAW_BUFFER_EXT 0x8CDB +#define GL_FRAMEBUFFER_INCOMPLETE_READ_BUFFER_EXT 0x8CDC +#define GL_FRAMEBUFFER_UNSUPPORTED_EXT 0x8CDD +#define GL_MAX_COLOR_ATTACHMENTS_EXT 0x8CDF +#define GL_COLOR_ATTACHMENT0_EXT 0x8CE0 +#define GL_COLOR_ATTACHMENT1_EXT 0x8CE1 +#define GL_COLOR_ATTACHMENT2_EXT 0x8CE2 +#define GL_COLOR_ATTACHMENT3_EXT 0x8CE3 +#define GL_COLOR_ATTACHMENT4_EXT 0x8CE4 +#define GL_COLOR_ATTACHMENT5_EXT 0x8CE5 +#define GL_COLOR_ATTACHMENT6_EXT 0x8CE6 +#define GL_COLOR_ATTACHMENT7_EXT 0x8CE7 +#define GL_COLOR_ATTACHMENT8_EXT 0x8CE8 +#define GL_COLOR_ATTACHMENT9_EXT 0x8CE9 +#define GL_COLOR_ATTACHMENT10_EXT 0x8CEA +#define GL_COLOR_ATTACHMENT11_EXT 0x8CEB +#define GL_COLOR_ATTACHMENT12_EXT 0x8CEC +#define GL_COLOR_ATTACHMENT13_EXT 0x8CED +#define GL_COLOR_ATTACHMENT14_EXT 0x8CEE +#define GL_COLOR_ATTACHMENT15_EXT 0x8CEF +#define GL_DEPTH_ATTACHMENT_EXT 0x8D00 +#define GL_STENCIL_ATTACHMENT_EXT 0x8D20 +#define GL_FRAMEBUFFER_EXT 0x8D40 +#define GL_RENDERBUFFER_EXT 0x8D41 +#define GL_RENDERBUFFER_WIDTH_EXT 0x8D42 +#define GL_RENDERBUFFER_HEIGHT_EXT 0x8D43 +#define GL_RENDERBUFFER_INTERNAL_FORMAT_EXT 0x8D44 +#define GL_STENCIL_INDEX1_EXT 0x8D46 +#define GL_STENCIL_INDEX4_EXT 0x8D47 +#define GL_STENCIL_INDEX8_EXT 0x8D48 +#define GL_STENCIL_INDEX16_EXT 0x8D49 +#define GL_RENDERBUFFER_RED_SIZE_EXT 0x8D50 +#define GL_RENDERBUFFER_GREEN_SIZE_EXT 0x8D51 +#define GL_RENDERBUFFER_BLUE_SIZE_EXT 0x8D52 +#define GL_RENDERBUFFER_ALPHA_SIZE_EXT 0x8D53 +#define GL_RENDERBUFFER_DEPTH_SIZE_EXT 0x8D54 +#define GL_RENDERBUFFER_STENCIL_SIZE_EXT 0x8D55 +#endif + +#ifndef GL_GREMEDY_string_marker +#endif + /*************************************************************/ #include +#ifndef GL_VERSION_2_0 +/* GL type for program/shader text */ +typedef char GLchar; /* native character */ +#endif + #ifndef GL_VERSION_1_5 /* GL types for handling large vertex buffer objects */ typedef ptrdiff_t GLintptr; @@ -2793,13 +3060,17 @@ typedef ptrdiff_t GLsizeiptrARB; #endif #ifndef GL_ARB_shader_objects -/* GL types for handling shader object handles and characters */ +/* GL types for handling shader object handles and program/shader text */ typedef char GLcharARB; /* native character */ typedef unsigned int GLhandleARB; /* shader object handle */ #endif +/* GL types for "half" precision (s10e5) float data in host memory */ +#ifndef GL_ARB_half_float_pixel +typedef unsigned short GLhalfARB; +#endif + #ifndef GL_NV_half_float -/* GL type for representing NVIDIA "half" floating point type in host memory */ typedef unsigned short GLhalfNV; #endif @@ -3123,6 +3394,198 @@ typedef void (APIENTRYP PFNGLGETBUFFERPARAMETERIVPROC) (GLenum target, GLenum pn typedef void (APIENTRYP PFNGLGETBUFFERPOINTERVPROC) (GLenum target, GLenum pname, GLvoid* *params); #endif +#ifndef GL_VERSION_2_0 +#define GL_VERSION_2_0 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glBlendEquationSeparate (GLenum, GLenum); +GLAPI void APIENTRY glDrawBuffers (GLsizei, const GLenum *); +GLAPI void APIENTRY glStencilOpSeparate (GLenum, GLenum, GLenum, GLenum); +GLAPI void APIENTRY glStencilFuncSeparate (GLenum, GLenum, GLint, GLuint); +GLAPI void APIENTRY glStencilMaskSeparate (GLenum, GLuint); +GLAPI void APIENTRY glAttachShader (GLuint, GLuint); +GLAPI void APIENTRY glBindAttribLocation (GLuint, GLuint, const GLchar *); +GLAPI void APIENTRY glCompileShader (GLuint); +GLAPI GLuint APIENTRY glCreateProgram (void); +GLAPI GLuint APIENTRY glCreateShader (GLenum); +GLAPI void APIENTRY glDeleteProgram (GLuint); +GLAPI void APIENTRY glDeleteShader (GLuint); +GLAPI void APIENTRY glDetachShader (GLuint, GLuint); +GLAPI void APIENTRY glDisableVertexAttribArray (GLuint); +GLAPI void APIENTRY glEnableVertexAttribArray (GLuint); +GLAPI void APIENTRY glGetActiveAttrib (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); +GLAPI void APIENTRY glGetActiveUniform (GLuint, GLuint, GLsizei, GLsizei *, GLint *, GLenum *, GLchar *); +GLAPI void APIENTRY glGetAttachedShaders (GLuint, GLsizei, GLsizei *, GLuint *); +GLAPI GLint APIENTRY glGetAttribLocation (GLuint, const GLchar *); +GLAPI void APIENTRY glGetProgramiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetProgramInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI void APIENTRY glGetShaderiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetShaderInfoLog (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI void APIENTRY glGetShaderSource (GLuint, GLsizei, GLsizei *, GLchar *); +GLAPI GLint APIENTRY glGetUniformLocation (GLuint, const GLchar *); +GLAPI void APIENTRY glGetUniformfv (GLuint, GLint, GLfloat *); +GLAPI void APIENTRY glGetUniformiv (GLuint, GLint, GLint *); +GLAPI void APIENTRY glGetVertexAttribdv (GLuint, GLenum, GLdouble *); +GLAPI void APIENTRY glGetVertexAttribfv (GLuint, GLenum, GLfloat *); +GLAPI void APIENTRY glGetVertexAttribiv (GLuint, GLenum, GLint *); +GLAPI void APIENTRY glGetVertexAttribPointerv (GLuint, GLenum, GLvoid* *); +GLAPI GLboolean APIENTRY glIsProgram (GLuint); +GLAPI GLboolean APIENTRY glIsShader (GLuint); +GLAPI void APIENTRY glLinkProgram (GLuint); +GLAPI void APIENTRY glShaderSource (GLuint, GLsizei, const GLchar* *, const GLint *); +GLAPI void APIENTRY glUseProgram (GLuint); +GLAPI void APIENTRY glUniform1f (GLint, GLfloat); +GLAPI void APIENTRY glUniform2f (GLint, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform3f (GLint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform4f (GLint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glUniform1i (GLint, GLint); +GLAPI void APIENTRY glUniform2i (GLint, GLint, GLint); +GLAPI void APIENTRY glUniform3i (GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform4i (GLint, GLint, GLint, GLint, GLint); +GLAPI void APIENTRY glUniform1fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform2fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform3fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform4fv (GLint, GLsizei, const GLfloat *); +GLAPI void APIENTRY glUniform1iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform2iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform3iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniform4iv (GLint, GLsizei, const GLint *); +GLAPI void APIENTRY glUniformMatrix2fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix3fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glUniformMatrix4fv (GLint, GLsizei, GLboolean, const GLfloat *); +GLAPI void APIENTRY glValidateProgram (GLuint); +GLAPI void APIENTRY glVertexAttrib1d (GLuint, GLdouble); +GLAPI void APIENTRY glVertexAttrib1dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib1f (GLuint, GLfloat); +GLAPI void APIENTRY glVertexAttrib1fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib1s (GLuint, GLshort); +GLAPI void APIENTRY glVertexAttrib1sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib2d (GLuint, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib2dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib2f (GLuint, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib2fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib2s (GLuint, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib2sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib3d (GLuint, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib3dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib3f (GLuint, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib3fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib3s (GLuint, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib3sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4Nbv (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4Niv (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4Nsv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4Nub (GLuint, GLubyte, GLubyte, GLubyte, GLubyte); +GLAPI void APIENTRY glVertexAttrib4Nubv (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4Nuiv (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4Nusv (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttrib4bv (GLuint, const GLbyte *); +GLAPI void APIENTRY glVertexAttrib4d (GLuint, GLdouble, GLdouble, GLdouble, GLdouble); +GLAPI void APIENTRY glVertexAttrib4dv (GLuint, const GLdouble *); +GLAPI void APIENTRY glVertexAttrib4f (GLuint, GLfloat, GLfloat, GLfloat, GLfloat); +GLAPI void APIENTRY glVertexAttrib4fv (GLuint, const GLfloat *); +GLAPI void APIENTRY glVertexAttrib4iv (GLuint, const GLint *); +GLAPI void APIENTRY glVertexAttrib4s (GLuint, GLshort, GLshort, GLshort, GLshort); +GLAPI void APIENTRY glVertexAttrib4sv (GLuint, const GLshort *); +GLAPI void APIENTRY glVertexAttrib4ubv (GLuint, const GLubyte *); +GLAPI void APIENTRY glVertexAttrib4uiv (GLuint, const GLuint *); +GLAPI void APIENTRY glVertexAttrib4usv (GLuint, const GLushort *); +GLAPI void APIENTRY glVertexAttribPointer (GLuint, GLint, GLenum, GLboolean, GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEPROC) (GLenum modeRGB, GLenum modeAlpha); +typedef void (APIENTRYP PFNGLDRAWBUFFERSPROC) (GLsizei n, const GLenum *bufs); +typedef void (APIENTRYP PFNGLSTENCILOPSEPARATEPROC) (GLenum face, GLenum sfail, GLenum dpfail, GLenum dppass); +typedef void (APIENTRYP PFNGLSTENCILFUNCSEPARATEPROC) (GLenum frontfunc, GLenum backfunc, GLint ref, GLuint mask); +typedef void (APIENTRYP PFNGLSTENCILMASKSEPARATEPROC) (GLenum face, GLuint mask); +typedef void (APIENTRYP PFNGLATTACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLBINDATTRIBLOCATIONPROC) (GLuint program, GLuint index, const GLchar *name); +typedef void (APIENTRYP PFNGLCOMPILESHADERPROC) (GLuint shader); +typedef GLuint (APIENTRYP PFNGLCREATEPROGRAMPROC) (void); +typedef GLuint (APIENTRYP PFNGLCREATESHADERPROC) (GLenum type); +typedef void (APIENTRYP PFNGLDELETEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLDELETESHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLDETACHSHADERPROC) (GLuint program, GLuint shader); +typedef void (APIENTRYP PFNGLDISABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLENABLEVERTEXATTRIBARRAYPROC) (GLuint index); +typedef void (APIENTRYP PFNGLGETACTIVEATTRIBPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETACTIVEUNIFORMPROC) (GLuint program, GLuint index, GLsizei bufSize, GLsizei *length, GLint *size, GLenum *type, GLchar *name); +typedef void (APIENTRYP PFNGLGETATTACHEDSHADERSPROC) (GLuint program, GLsizei maxCount, GLsizei *count, GLuint *obj); +typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETPROGRAMIVPROC) (GLuint program, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETPROGRAMINFOLOGPROC) (GLuint program, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERIVPROC) (GLuint shader, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETSHADERINFOLOGPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *infoLog); +typedef void (APIENTRYP PFNGLGETSHADERSOURCEPROC) (GLuint shader, GLsizei bufSize, GLsizei *length, GLchar *source); +typedef GLint (APIENTRYP PFNGLGETUNIFORMLOCATIONPROC) (GLuint program, const GLchar *name); +typedef void (APIENTRYP PFNGLGETUNIFORMFVPROC) (GLuint program, GLint location, GLfloat *params); +typedef void (APIENTRYP PFNGLGETUNIFORMIVPROC) (GLuint program, GLint location, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBDVPROC) (GLuint index, GLenum pname, GLdouble *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBFVPROC) (GLuint index, GLenum pname, GLfloat *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBIVPROC) (GLuint index, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGETVERTEXATTRIBPOINTERVPROC) (GLuint index, GLenum pname, GLvoid* *pointer); +typedef GLboolean (APIENTRYP PFNGLISPROGRAMPROC) (GLuint program); +typedef GLboolean (APIENTRYP PFNGLISSHADERPROC) (GLuint shader); +typedef void (APIENTRYP PFNGLLINKPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLSHADERSOURCEPROC) (GLuint shader, GLsizei count, const GLchar* *string, const GLint *length); +typedef void (APIENTRYP PFNGLUSEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLUNIFORM1FPROC) (GLint location, GLfloat v0); +typedef void (APIENTRYP PFNGLUNIFORM2FPROC) (GLint location, GLfloat v0, GLfloat v1); +typedef void (APIENTRYP PFNGLUNIFORM3FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2); +typedef void (APIENTRYP PFNGLUNIFORM4FPROC) (GLint location, GLfloat v0, GLfloat v1, GLfloat v2, GLfloat v3); +typedef void (APIENTRYP PFNGLUNIFORM1IPROC) (GLint location, GLint v0); +typedef void (APIENTRYP PFNGLUNIFORM2IPROC) (GLint location, GLint v0, GLint v1); +typedef void (APIENTRYP PFNGLUNIFORM3IPROC) (GLint location, GLint v0, GLint v1, GLint v2); +typedef void (APIENTRYP PFNGLUNIFORM4IPROC) (GLint location, GLint v0, GLint v1, GLint v2, GLint v3); +typedef void (APIENTRYP PFNGLUNIFORM1FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM2FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM3FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM4FVPROC) (GLint location, GLsizei count, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORM1IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM2IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM3IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORM4IVPROC) (GLint location, GLsizei count, const GLint *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX2FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX3FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLUNIFORMMATRIX4FVPROC) (GLint location, GLsizei count, GLboolean transpose, const GLfloat *value); +typedef void (APIENTRYP PFNGLVALIDATEPROGRAMPROC) (GLuint program); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DPROC) (GLuint index, GLdouble x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FPROC) (GLuint index, GLfloat x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SPROC) (GLuint index, GLshort x); +typedef void (APIENTRYP PFNGLVERTEXATTRIB1SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DPROC) (GLuint index, GLdouble x, GLdouble y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FPROC) (GLuint index, GLfloat x, GLfloat y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SPROC) (GLuint index, GLshort x, GLshort y); +typedef void (APIENTRYP PFNGLVERTEXATTRIB2SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SPROC) (GLuint index, GLshort x, GLshort y, GLshort z); +typedef void (APIENTRYP PFNGLVERTEXATTRIB3SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NBVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NIVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NSVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBPROC) (GLuint index, GLubyte x, GLubyte y, GLubyte z, GLubyte w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4NUSVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4BVPROC) (GLuint index, const GLbyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DPROC) (GLuint index, GLdouble x, GLdouble y, GLdouble z, GLdouble w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4DVPROC) (GLuint index, const GLdouble *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FPROC) (GLuint index, GLfloat x, GLfloat y, GLfloat z, GLfloat w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4FVPROC) (GLuint index, const GLfloat *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4IVPROC) (GLuint index, const GLint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SPROC) (GLuint index, GLshort x, GLshort y, GLshort z, GLshort w); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4SVPROC) (GLuint index, const GLshort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UBVPROC) (GLuint index, const GLubyte *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4UIVPROC) (GLuint index, const GLuint *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIB4USVPROC) (GLuint index, const GLushort *v); +typedef void (APIENTRYP PFNGLVERTEXATTRIBPOINTERPROC) (GLuint index, GLint size, GLenum type, GLboolean normalized, GLsizei stride, const GLvoid *pointer); +#endif + #ifndef GL_ARB_multitexture #define GL_ARB_multitexture 1 #ifdef GL_GLEXT_PROTOTYPES @@ -3315,8 +3778,8 @@ typedef void (APIENTRYP PFNGLMATRIXINDEXPOINTERARBPROC) (GLint size, GLenum type #define GL_ARB_texture_env_dot3 1 #endif -#ifndef GL_ARB_texture_mirror_repeat -#define GL_ARB_texture_mirror_repeat 1 +#ifndef GL_ARB_texture_mirrored_repeat +#define GL_ARB_texture_mirrored_repeat 1 #endif #ifndef GL_ARB_depth_texture @@ -3666,6 +4129,42 @@ typedef GLint (APIENTRYP PFNGLGETATTRIBLOCATIONARBPROC) (GLhandleARB programObj, #define GL_ARB_point_sprite 1 #endif +#ifndef GL_ARB_fragment_program_shadow +#define GL_ARB_fragment_program_shadow 1 +#endif + +#ifndef GL_ARB_draw_buffers +#define GL_ARB_draw_buffers 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glDrawBuffersARB (GLsizei, const GLenum *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLDRAWBUFFERSARBPROC) (GLsizei n, const GLenum *bufs); +#endif + +#ifndef GL_ARB_texture_rectangle +#define GL_ARB_texture_rectangle 1 +#endif + +#ifndef GL_ARB_color_buffer_float +#define GL_ARB_color_buffer_float 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glClampColorARB (GLenum, GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLCLAMPCOLORARBPROC) (GLenum target, GLenum clamp); +#endif + +#ifndef GL_ARB_half_float_pixel +#define GL_ARB_half_float_pixel 1 +#endif + +#ifndef GL_ARB_texture_float +#define GL_ARB_texture_float 1 +#endif + +#ifndef GL_ARB_pixel_buffer_object +#define GL_ARB_pixel_buffer_object 1 +#endif + #ifndef GL_EXT_abgr #define GL_EXT_abgr 1 #endif @@ -5692,6 +6191,13 @@ GLAPI void APIENTRY glDrawBuffersATI (GLsizei, const GLenum *); typedef void (APIENTRYP PFNGLDRAWBUFFERSATIPROC) (GLsizei n, const GLenum *bufs); #endif +#ifndef GL_ATI_pixel_format_float +#define GL_ATI_pixel_format_float 1 +/* This is really a WGL extension, but defines some associated GL enums. + * ATI does not export "GL_ATI_pixel_format_float" in the GL_EXTENSIONS string. + */ +#endif + #ifndef GL_ATI_texture_env_combine3 #define GL_ATI_texture_env_combine3 1 #endif @@ -5881,6 +6387,10 @@ typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTFVATIPROC) (GLuint index, typedef void (APIENTRYP PFNGLGETVERTEXATTRIBARRAYOBJECTIVATIPROC) (GLuint index, GLenum pname, GLint *params); #endif +#ifndef GL_OES_read_format +#define GL_OES_read_format 1 +#endif + #ifndef GL_EXT_depth_bounds_test #define GL_EXT_depth_bounds_test 1 #ifdef GL_GLEXT_PROTOTYPES @@ -5909,6 +6419,74 @@ typedef void (APIENTRYP PFNGLBLENDEQUATIONSEPARATEEXTPROC) (GLenum modeRGB, GLen #define GL_MESA_ycbcr_texture 1 #endif +#ifndef GL_EXT_pixel_buffer_object +#define GL_EXT_pixel_buffer_object 1 +#endif + +#ifndef GL_NV_fragment_program_option +#define GL_NV_fragment_program_option 1 +#endif + +#ifndef GL_NV_fragment_program2 +#define GL_NV_fragment_program2 1 +#endif + +#ifndef GL_NV_vertex_program2_option +#define GL_NV_vertex_program2_option 1 +#endif + +#ifndef GL_NV_vertex_program3 +#define GL_NV_vertex_program3 1 +#endif + +#ifndef GL_EXT_framebuffer_object +#define GL_EXT_framebuffer_object 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI GLboolean APIENTRY glIsRenderbufferEXT (GLuint); +GLAPI void APIENTRY glBindRenderbufferEXT (GLenum, GLuint); +GLAPI void APIENTRY glDeleteRenderbuffersEXT (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenRenderbuffersEXT (GLsizei, GLuint *); +GLAPI void APIENTRY glRenderbufferStorageEXT (GLenum, GLenum, GLsizei, GLsizei); +GLAPI void APIENTRY glGetRenderbufferParameterivEXT (GLenum, GLenum, GLint *); +GLAPI GLboolean APIENTRY glIsFramebufferEXT (GLuint); +GLAPI void APIENTRY glBindFramebufferEXT (GLenum, GLuint); +GLAPI void APIENTRY glDeleteFramebuffersEXT (GLsizei, const GLuint *); +GLAPI void APIENTRY glGenFramebuffersEXT (GLsizei, GLuint *); +GLAPI GLenum APIENTRY glCheckFramebufferStatusEXT (GLenum); +GLAPI void APIENTRY glFramebufferTexture1DEXT (GLenum, GLenum, GLenum, GLuint, GLint); +GLAPI void APIENTRY glFramebufferTexture2DEXT (GLenum, GLenum, GLenum, GLuint, GLint); +GLAPI void APIENTRY glFramebufferTexture3DEXT (GLenum, GLenum, GLenum, GLuint, GLint, GLint); +GLAPI void APIENTRY glFramebufferRenderbufferEXT (GLenum, GLenum, GLenum, GLuint); +GLAPI void APIENTRY glGetFramebufferAttachmentParameterivEXT (GLenum, GLenum, GLenum, GLint *); +GLAPI void APIENTRY glGenerateMipmapEXT (GLenum); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef GLboolean (APIENTRYP PFNGLISRENDERBUFFEREXTPROC) (GLuint renderbuffer); +typedef void (APIENTRYP PFNGLBINDRENDERBUFFEREXTPROC) (GLenum target, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLDELETERENDERBUFFERSEXTPROC) (GLsizei n, const GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLGENRENDERBUFFERSEXTPROC) (GLsizei n, GLuint *renderbuffers); +typedef void (APIENTRYP PFNGLRENDERBUFFERSTORAGEEXTPROC) (GLenum target, GLenum internalformat, GLsizei width, GLsizei height); +typedef void (APIENTRYP PFNGLGETRENDERBUFFERPARAMETERIVEXTPROC) (GLenum target, GLenum pname, GLint *params); +typedef GLboolean (APIENTRYP PFNGLISFRAMEBUFFEREXTPROC) (GLuint framebuffer); +typedef void (APIENTRYP PFNGLBINDFRAMEBUFFEREXTPROC) (GLenum target, GLuint framebuffer); +typedef void (APIENTRYP PFNGLDELETEFRAMEBUFFERSEXTPROC) (GLsizei n, const GLuint *framebuffers); +typedef void (APIENTRYP PFNGLGENFRAMEBUFFERSEXTPROC) (GLsizei n, GLuint *framebuffers); +typedef GLenum (APIENTRYP PFNGLCHECKFRAMEBUFFERSTATUSEXTPROC) (GLenum target); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE1DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE2DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level); +typedef void (APIENTRYP PFNGLFRAMEBUFFERTEXTURE3DEXTPROC) (GLenum target, GLenum attachment, GLenum textarget, GLuint texture, GLint level, GLint zoffset); +typedef void (APIENTRYP PFNGLFRAMEBUFFERRENDERBUFFEREXTPROC) (GLenum target, GLenum attachment, GLenum renderbuffertarget, GLuint renderbuffer); +typedef void (APIENTRYP PFNGLGETFRAMEBUFFERATTACHMENTPARAMETERIVEXTPROC) (GLenum target, GLenum attachment, GLenum pname, GLint *params); +typedef void (APIENTRYP PFNGLGENERATEMIPMAPEXTPROC) (GLenum target); +#endif + +#ifndef GL_GREMEDY_string_marker +#define GL_GREMEDY_string_marker 1 +#ifdef GL_GLEXT_PROTOTYPES +GLAPI void APIENTRY glStringMarkerGREMEDY (GLsizei, const GLvoid *); +#endif /* GL_GLEXT_PROTOTYPES */ +typedef void (APIENTRYP PFNGLSTRINGMARKERGREMEDYPROC) (GLsizei len, const GLvoid *string); +#endif + #ifdef __cplusplus } diff --git a/panda/src/gobj/texture.h b/panda/src/gobj/texture.h index 8b93f826e4..43bccb49d3 100644 --- a/panda/src/gobj/texture.h +++ b/panda/src/gobj/texture.h @@ -289,12 +289,14 @@ public: static PT(Texture) make_texture(); +public: + static int up_to_power_2(int value); + static int down_to_power_2(int value); + protected: virtual void reconsider_dirty(); virtual void reload_ram_image(); - static int up_to_power_2(int value); - static int down_to_power_2(int value); bool reconsider_z_size(int z); bool reconsider_image_properties(int x_size, int y_size, int num_components, ComponentType component_type, int z); diff --git a/panda/src/wgldisplay/wglGraphicsBuffer.cxx b/panda/src/wgldisplay/wglGraphicsBuffer.cxx index 0cfe0811cd..127c2c019e 100644 --- a/panda/src/wgldisplay/wglGraphicsBuffer.cxx +++ b/panda/src/wgldisplay/wglGraphicsBuffer.cxx @@ -235,13 +235,12 @@ open_buffer() { wgldisplay_cat.debug() << "Created PBuffer " << _pbuffer << ", DC " << _pbuffer_dc << "\n"; switch (_rtm_mode) { - case RTM_bind_texture: + case RTM_bind_or_copy: wgldisplay_cat.debug() << "pbuffer renders directly to texture.\n"; break; case RTM_copy_texture: - case RTM_bind_if_possible: wgldisplay_cat.debug() << "pbuffer copies indirectly into texture.\n"; break; @@ -288,7 +287,7 @@ make_pbuffer(HDC twindow_dc) { if (wglgsg->_supports_pixel_format) { bool got_pbuffer_format = false; - if (_rtm_mode == RTM_bind_if_possible && + if ((_rtm_mode == RTM_bind_or_copy) && wglgsg->_supports_render_texture) { // First, try to get a pbuffer format that supports // render-to-texture. @@ -296,12 +295,12 @@ make_pbuffer(HDC twindow_dc) { if (new_pbformat != 0) { pbformat = new_pbformat; got_pbuffer_format = true; - _rtm_mode = RTM_bind_texture; } } if (!got_pbuffer_format) { // Failing that, just get a matching pbuffer format. + _rtm_mode = RTM_copy_texture; int new_pbformat = choose_pbuffer_format(twindow_dc, false); if (new_pbformat != 0) { pbformat = new_pbformat; @@ -323,7 +322,7 @@ make_pbuffer(HDC twindow_dc) { int iattrib_list[max_attrib_list]; int ni = 0; - if (_rtm_mode == RTM_bind_texture) { + if (_rtm_mode == RTM_bind_or_copy) { nassertr(_texture != (Texture *)NULL, false); if (_gsg->get_properties().get_frame_buffer_mode() & FrameBufferProperties::FM_alpha) {