Files
OpenSceneGraph/include/osg/Texture2DMultisample
Robert Osfield 5d0b84edd0 From Marcin Hajder, "This submission contains Texture2DMultisample osg implementation.
Texture2DMultismaple as name suggests provides means to directly access subsamples of rendered FBO target. (GLSL 1.5 texelFetch call).

Recently I was working on deferred renderer with OSG, during that I noticed there is no support for multisampled textures (GL_ARB_texture_multisample extension). After consultations with Paul Martz and Wojtek Lewandowski I added Texture2DMultisample class and made few necessary changes around osg::FrameBufferObject, osg::Texture and osgUtil::RenderStage classes."

and from follow email:

"Fixed. According to ARB_texture_multisample extension specification multisample textures  don't need TexParameters since they can only be fetched with  texelFetch."
2010-04-22 17:02:22 +00:00

96 lines
3.4 KiB
C++

/* -*-c++-*- OpenSceneGraph - Copyright (C) 1998-2010 Robert Osfield
*
* This library is open source and may be redistributed and/or modified under
* the terms of the OpenSceneGraph Public License (OSGPL) version 0.0 or
* (at your option) any later version. The full license is in LICENSE file
* included with this distribution, and on the openscenegraph.org website.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* OpenSceneGraph Public License for more details.
*
* Texture2DMultisample codes Copyright (C) 2010 Marcin Hajder
* Thanks to to my company http://www.ai.com.pl for allowing me free this work.
*/
#ifndef OSG_TEXTURE2DMS
#define OSG_TEXTURE2DMS 1
#include <osg/Texture>
namespace osg {
/** Texture2DMultisample state class which encapsulates OpenGL 2D multisampled texture functionality.
* Multisampled texture were introduced with OpenGL 3.1 and extension GL_ARB_texture_multisample.
* See http://www.opengl.org/registry/specs/ARB/texture_multisample.txt for more info.
*/
class OSG_EXPORT Texture2DMultisample : public Texture
{
public :
Texture2DMultisample();
Texture2DMultisample(GLsizei numSamples, GLboolean fixedsamplelocations);
/** Copy constructor using CopyOp to manage deep vs shallow copy. */
Texture2DMultisample(const Texture2DMultisample& text,const CopyOp& copyop=CopyOp::SHALLOW_COPY);
META_StateAttribute(osg, Texture2DMultisample,TEXTURE);
/** Return -1 if *this < *rhs, 0 if *this==*rhs, 1 if *this>*rhs. */
virtual int compare(const StateAttribute& rhs) const;
virtual GLenum getTextureTarget() const
{
return GL_TEXTURE_2D_MULTISAMPLE;
}
/** Sets the texture width and height. If width or height are zero,
* calculate the respective value from the source image size. */
inline void setTextureSize(int width, int height) const
{
_textureWidth = width;
_textureHeight = height;
}
inline void setNumSamples( int samples ) { _numSamples = samples; }
// unnecessary for Texture2DMultisample
virtual void setImage(unsigned int face, Image* image){}
virtual Image* getImage(unsigned int face){return NULL;}
virtual const Image* getImage(unsigned int face) const{return NULL;}
virtual unsigned int getNumImages() const{return 0;}
virtual void allocateMipmap(State& state) const {}
void setTextureWidth(int width) { _textureWidth=width; }
void setTextureHeight(int height) { _textureHeight=height; }
virtual int getTextureWidth() const { return _textureWidth; }
virtual int getTextureHeight() const { return _textureHeight; }
virtual int getTextureDepth() const { return 1; }
/** Bind the texture object. If the texture object hasn't already been
* compiled, create the texture mipmap levels. */
virtual void apply(State& state) const;
protected :
virtual ~Texture2DMultisample();
virtual void computeInternalFormat() const;
/** Subloaded images can have different texture and image sizes. */
mutable GLsizei _textureWidth, _textureHeight;
mutable GLsizei _numSamples;
mutable GLboolean _fixedsamplelocations;
};
}
#endif