Merged revisions 2072:2087 from 1.5 branch. Some missing inits fixed, OpenGL FBO fails better recognizeable, docs updated.
git-svn-id: svn://svn.code.sf.net/p/irrlicht/code/trunk@2088 dfc29bdd-3216-0410-991c-e03cc46cb475master
parent
accdcfa76d
commit
0cb7f45018
|
@ -513,6 +513,10 @@ namespace scene
|
||||||
/** This camera does not react on user input like for example the one created with
|
/** This camera does not react on user input like for example the one created with
|
||||||
addCameraSceneNodeFPS(). If you want to move or animate it, use animators or the
|
addCameraSceneNodeFPS(). If you want to move or animate it, use animators or the
|
||||||
ISceneNode::setPosition(), ICameraSceneNode::setTarget() etc methods.
|
ISceneNode::setPosition(), ICameraSceneNode::setTarget() etc methods.
|
||||||
|
By default, a camera's look at position (set with setTarget()) and its scene node
|
||||||
|
rotation (set with setRotation()) are independent. If you want to be able to
|
||||||
|
control the direction that the camera looks by using setRotation() then call
|
||||||
|
ICameraSceneNode::bindTargetAndRotation(true) on it.
|
||||||
\param position: Position of the space relative to its parent where the camera will be placed.
|
\param position: Position of the space relative to its parent where the camera will be placed.
|
||||||
\param lookat: Position where the camera will look at. Also known as target.
|
\param lookat: Position where the camera will look at. Also known as target.
|
||||||
\param parent: Parent scene node of the camera. Can be null. If the parent moves,
|
\param parent: Parent scene node of the camera. Can be null. If the parent moves,
|
||||||
|
@ -1033,7 +1037,7 @@ namespace scene
|
||||||
//! Creates a fly circle animator, which lets the attached scene node fly around a center.
|
//! Creates a fly circle animator, which lets the attached scene node fly around a center.
|
||||||
/** \param center: Center of the circle.
|
/** \param center: Center of the circle.
|
||||||
\param radius: Radius of the circle.
|
\param radius: Radius of the circle.
|
||||||
\param speed: Specifies the speed of the flight.
|
\param speed: The orbital speed, in radians per millisecond.
|
||||||
\param direction: Specifies the upvector used for alignment of the mesh.
|
\param direction: Specifies the upvector used for alignment of the mesh.
|
||||||
\return The animator. Attach it to a scene node with ISceneNode::addAnimator()
|
\return The animator. Attach it to a scene node with ISceneNode::addAnimator()
|
||||||
and the animator will animate it.
|
and the animator will animate it.
|
||||||
|
|
|
@ -33,13 +33,11 @@ CGUIEditBox::CGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* envi
|
||||||
const core::rect<s32>& rectangle)
|
const core::rect<s32>& rectangle)
|
||||||
: IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false),
|
: IGUIEditBox(environment, parent, id, rectangle), MouseMarking(false),
|
||||||
Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0),
|
Border(border), OverrideColorEnabled(false), MarkBegin(0), MarkEnd(0),
|
||||||
OverrideColor(video::SColor(101,255,255,255)),
|
OverrideColor(video::SColor(101,255,255,255)), OverrideFont(0), LastBreakFont(0),
|
||||||
OverrideFont(0), LastBreakFont(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0),
|
Operator(0), BlinkStartTime(0), CursorPos(0), HScrollPos(0), VScrollPos(0), Max(0),
|
||||||
WordWrap(false), MultiLine(false), AutoScroll(true), PasswordBox(false),
|
WordWrap(false), MultiLine(false), AutoScroll(true), PasswordBox(false),
|
||||||
PasswordChar(L'*'),
|
PasswordChar(L'*'), HAlign(EGUIA_UPPERLEFT), VAlign(EGUIA_CENTER),
|
||||||
HAlign(EGUIA_UPPERLEFT), VAlign(EGUIA_CENTER),
|
|
||||||
CurrentTextRect(0,0,1,1), FrameRect(rectangle)
|
CurrentTextRect(0,0,1,1), FrameRect(rectangle)
|
||||||
|
|
||||||
{
|
{
|
||||||
#ifdef _DEBUG
|
#ifdef _DEBUG
|
||||||
setDebugName("CGUIEditBox");
|
setDebugName("CGUIEditBox");
|
||||||
|
@ -47,7 +45,8 @@ CGUIEditBox::CGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* envi
|
||||||
|
|
||||||
Text = text;
|
Text = text;
|
||||||
|
|
||||||
Operator = environment->getOSOperator();
|
if (Environment)
|
||||||
|
Operator = Environment->getOSOperator();
|
||||||
|
|
||||||
if (Operator)
|
if (Operator)
|
||||||
Operator->grab();
|
Operator->grab();
|
||||||
|
@ -56,7 +55,9 @@ CGUIEditBox::CGUIEditBox(const wchar_t* text, bool border, IGUIEnvironment* envi
|
||||||
setTabStop(true);
|
setTabStop(true);
|
||||||
setTabOrder(-1);
|
setTabOrder(-1);
|
||||||
|
|
||||||
IGUISkin *skin = Environment->getSkin();
|
IGUISkin *skin = 0;
|
||||||
|
if (Environment)
|
||||||
|
skin = Environment->getSkin();
|
||||||
if (Border && skin)
|
if (Border && skin)
|
||||||
{
|
{
|
||||||
FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
|
FrameRect.UpperLeftCorner.X += skin->getSize(EGDS_TEXT_DISTANCE_X)+1;
|
||||||
|
|
|
@ -39,7 +39,7 @@ bool CImageLoaderPPM::isALoadableFileExtension(const c8* fileName) const
|
||||||
//! returns true if the file maybe is able to be loaded by this class
|
//! returns true if the file maybe is able to be loaded by this class
|
||||||
bool CImageLoaderPPM::isALoadableFileFormat(io::IReadFile* file) const
|
bool CImageLoaderPPM::isALoadableFileFormat(io::IReadFile* file) const
|
||||||
{
|
{
|
||||||
c8 id[2];
|
c8 id[2]={0};
|
||||||
file->read(&id, 2);
|
file->read(&id, 2);
|
||||||
return (id[0]=='P' && id[1]>'0' && id[1]<'7');
|
return (id[0]=='P' && id[1]>'0' && id[1]<'7');
|
||||||
}
|
}
|
||||||
|
|
|
@ -2806,14 +2806,20 @@ ITexture* COpenGLDriver::addRenderTargetTexture(const core::dimension2d<s32>& si
|
||||||
rtt = new COpenGLFBOTexture(size, name, this);
|
rtt = new COpenGLFBOTexture(size, name, this);
|
||||||
if (rtt)
|
if (rtt)
|
||||||
{
|
{
|
||||||
|
bool success = false;
|
||||||
addTexture(rtt);
|
addTexture(rtt);
|
||||||
ITexture* tex = createDepthTexture(rtt);
|
ITexture* tex = createDepthTexture(rtt);
|
||||||
if (tex)
|
if (tex)
|
||||||
{
|
{
|
||||||
static_cast<video::COpenGLFBODepthTexture*>(tex)->attach(rtt);
|
success = static_cast<video::COpenGLFBODepthTexture*>(tex)->attach(rtt);
|
||||||
tex->drop();
|
tex->drop();
|
||||||
}
|
}
|
||||||
rtt->drop();
|
rtt->drop();
|
||||||
|
if (!success)
|
||||||
|
{
|
||||||
|
removeTexture(rtt);
|
||||||
|
rtt=0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
|
|
@ -433,11 +433,8 @@ void COpenGLTexture::unbindRTT()
|
||||||
|
|
||||||
/* FBO Textures */
|
/* FBO Textures */
|
||||||
|
|
||||||
#ifdef GL_EXT_framebuffer_object
|
|
||||||
// helper function for render to texture
|
// helper function for render to texture
|
||||||
static bool checkFBOStatus(COpenGLDriver* Driver);
|
static bool checkFBOStatus(COpenGLDriver* Driver);
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
//! RTT ColorFrameBuffer constructor
|
//! RTT ColorFrameBuffer constructor
|
||||||
COpenGLFBOTexture::COpenGLFBOTexture(const core::dimension2d<s32>& size,
|
COpenGLFBOTexture::COpenGLFBOTexture(const core::dimension2d<s32>& size,
|
||||||
|
@ -605,10 +602,10 @@ COpenGLFBODepthTexture::~COpenGLFBODepthTexture()
|
||||||
|
|
||||||
|
|
||||||
//combine depth texture and rtt
|
//combine depth texture and rtt
|
||||||
void COpenGLFBODepthTexture::attach(ITexture* renderTex)
|
bool COpenGLFBODepthTexture::attach(ITexture* renderTex)
|
||||||
{
|
{
|
||||||
if (!renderTex)
|
if (!renderTex)
|
||||||
return;
|
return false;
|
||||||
video::COpenGLFBOTexture* rtt = static_cast<video::COpenGLFBOTexture*>(renderTex);
|
video::COpenGLFBOTexture* rtt = static_cast<video::COpenGLFBOTexture*>(renderTex);
|
||||||
rtt->bindRTT();
|
rtt->bindRTT();
|
||||||
#ifdef GL_EXT_framebuffer_object
|
#ifdef GL_EXT_framebuffer_object
|
||||||
|
@ -636,13 +633,17 @@ void COpenGLFBODepthTexture::attach(ITexture* renderTex)
|
||||||
GL_RENDERBUFFER_EXT,
|
GL_RENDERBUFFER_EXT,
|
||||||
DepthRenderBuffer);
|
DepthRenderBuffer);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
// check the status
|
// check the status
|
||||||
if (!checkFBOStatus(Driver))
|
if (!checkFBOStatus(Driver))
|
||||||
|
{
|
||||||
os::Printer::log("FBO incomplete");
|
os::Printer::log("FBO incomplete");
|
||||||
#endif
|
return false;
|
||||||
|
}
|
||||||
rtt->DepthTexture=this;
|
rtt->DepthTexture=this;
|
||||||
grab(); // grab the depth buffer, not the RTT
|
grab(); // grab the depth buffer, not the RTT
|
||||||
rtt->unbindRTT();
|
rtt->unbindRTT();
|
||||||
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -658,9 +659,9 @@ void COpenGLFBODepthTexture::unbindRTT()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef GL_EXT_framebuffer_object
|
|
||||||
bool checkFBOStatus(COpenGLDriver* Driver)
|
bool checkFBOStatus(COpenGLDriver* Driver)
|
||||||
{
|
{
|
||||||
|
#ifdef GL_EXT_framebuffer_object
|
||||||
GLenum status = Driver->extGlCheckFramebufferStatus(GL_FRAMEBUFFER_EXT);
|
GLenum status = Driver->extGlCheckFramebufferStatus(GL_FRAMEBUFFER_EXT);
|
||||||
|
|
||||||
switch (status)
|
switch (status)
|
||||||
|
@ -707,10 +708,10 @@ bool checkFBOStatus(COpenGLDriver* Driver)
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
os::Printer::log("FBO error", ELL_ERROR);
|
os::Printer::log("FBO error", ELL_ERROR);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
} // end namespace video
|
} // end namespace video
|
||||||
|
|
|
@ -175,7 +175,7 @@ public:
|
||||||
//! Unbind RenderTargetTexture
|
//! Unbind RenderTargetTexture
|
||||||
virtual void unbindRTT();
|
virtual void unbindRTT();
|
||||||
|
|
||||||
void attach(ITexture*);
|
bool attach(ITexture*);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
GLuint DepthRenderBuffer;
|
GLuint DepthRenderBuffer;
|
||||||
|
|
Loading…
Reference in New Issue