Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
Menu
Open sidebar
Gepetto
OpenSceneGraph
Commits
b8416a7a
Commit
b8416a7a
authored
Mar 25, 2020
by
Julien Valentin
Committed by
Robert Osfield
May 03, 2020
Browse files
prevent immutability resetting when textureobject is taken from orphans
parent
c29e2e4f
Changes
7
Hide whitespace changes
Inline
Side-by-side
src/osg/Texture1D.cpp
View file @
b8416a7a
...
...
@@ -238,13 +238,15 @@ void Texture1D::apply(State& state) const
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_1D
,
_numMipmapLevels
,
texStorageSizedInternalFormat
,
_textureWidth
,
1
,
1
,
0
);
textureObject
->
bind
(
state
);
applyTexParameters
(
GL_TEXTURE_1D
,
state
);
extensions
->
glTexStorage1D
(
GL_TEXTURE_1D
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
);
if
(
!
textureObject
->
_allocated
)
{
extensions
->
glTexStorage1D
(
GL_TEXTURE_1D
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
);
}
}
else
{
GLenum
internalFormat
=
_sourceFormat
?
_sourceFormat
:
_internalFormat
;
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_1D
,
_numMipmapLevels
,
internalFormat
,
_textureWidth
,
1
,
1
,
0
);
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_1D
,
_numMipmapLevels
,
internalFormat
,
_textureWidth
,
1
,
1
,
_borderWidth
);
textureObject
->
bind
(
state
);
applyTexParameters
(
GL_TEXTURE_1D
,
state
);
...
...
@@ -260,6 +262,8 @@ void Texture1D::apply(State& state) const
_readPBuffer
->
bindPBufferToTexture
(
GL_FRONT
);
}
textureObject
->
setAllocated
(
_numMipmapLevels
,
texStorageSizedInternalFormat
!=
0
?
texStorageSizedInternalFormat
:
_internalFormat
,
_textureWidth
,
1
,
1
,
_borderWidth
);
}
else
{
...
...
src/osg/Texture2D.cpp
View file @
b8416a7a
...
...
@@ -298,27 +298,30 @@ void Texture2D::apply(State& state) const
else
if
(
(
_textureWidth
!=
0
)
&&
(
_textureHeight
!=
0
)
&&
(
_internalFormat
!=
0
)
)
{
// no image present, but dimensions at set so lets create the texture
GLExtensions
*
extensions
=
state
.
get
<
GLExtensions
>
();
GLenum
texStorageSizedInternalFormat
=
extensions
->
isTextureStorageEnabled
&&
(
_borderWidth
==
0
)
?
selectSizedInternalFormat
()
:
0
;
if
(
texStorageSizedInternalFormat
!=
0
)
{
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_2D
,
_numMipmapLevels
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
1
,
_borderWidth
);
textureObject
->
bind
(
state
);
applyTexParameters
(
GL_TEXTURE_2D
,
state
);
extensions
->
glTexStorage2D
(
GL_TEXTURE_2D
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
);
}
else
{
GLenum
internalFormat
=
_sourceFormat
?
_sourceFormat
:
_internalFormat
;
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_2D
,
_numMipmapLevels
,
internalFormat
,
_textureWidth
,
_textureHeight
,
1
,
_borderWidth
);
textureObject
->
bind
(
state
);
applyTexParameters
(
GL_TEXTURE_2D
,
state
);
glTexImage2D
(
GL_TEXTURE_2D
,
0
,
_internalFormat
,
_textureWidth
,
_textureHeight
,
_borderWidth
,
internalFormat
,
_sourceType
?
_sourceType
:
GL_UNSIGNED_BYTE
,
0
);
GLExtensions
*
extensions
=
state
.
get
<
GLExtensions
>
();
GLenum
texStorageSizedInternalFormat
=
extensions
->
isTextureStorageEnabled
&&
(
_borderWidth
==
0
)
?
selectSizedInternalFormat
()
:
0
;
if
(
texStorageSizedInternalFormat
!=
0
)
{
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_2D
,
_numMipmapLevels
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
1
,
_borderWidth
);
textureObject
->
bind
(
state
);
applyTexParameters
(
GL_TEXTURE_2D
,
state
);
if
(
!
textureObject
->
_allocated
)
{
extensions
->
glTexStorage2D
(
GL_TEXTURE_2D
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
);
}
}
else
{
GLenum
internalFormat
=
_sourceFormat
?
_sourceFormat
:
_internalFormat
;
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_2D
,
_numMipmapLevels
,
internalFormat
,
_textureWidth
,
_textureHeight
,
1
,
_borderWidth
);
textureObject
->
bind
(
state
);
applyTexParameters
(
GL_TEXTURE_2D
,
state
);
glTexImage2D
(
GL_TEXTURE_2D
,
0
,
_internalFormat
,
_textureWidth
,
_textureHeight
,
_borderWidth
,
internalFormat
,
_sourceType
?
_sourceType
:
GL_UNSIGNED_BYTE
,
0
);
}
if
(
_readPBuffer
.
valid
())
...
...
@@ -326,6 +329,7 @@ void Texture2D::apply(State& state) const
_readPBuffer
->
bindPBufferToTexture
(
GL_FRONT
);
}
textureObject
->
setAllocated
(
_numMipmapLevels
,
texStorageSizedInternalFormat
!=
0
?
texStorageSizedInternalFormat
:
_internalFormat
,
_textureWidth
,
_textureHeight
,
1
,
_borderWidth
);
}
else
{
...
...
src/osg/Texture2DArray.cpp
View file @
b8416a7a
...
...
@@ -353,7 +353,7 @@ void Texture2DArray::apply(State& state) const
applyTexParameters
(
GL_TEXTURE_2D_ARRAY
,
state
);
// First we need to allocate the texture memory
if
(
texStorageSizedInternalFormat
!=
0
)
if
(
texStorageSizedInternalFormat
!=
0
&&
!
textureObject
->
_allocated
)
{
extensions
->
glTexStorage3D
(
GL_TEXTURE_2D_ARRAY
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
textureDepth
);
}
...
...
@@ -452,7 +452,7 @@ void Texture2DArray::apply(State& state) const
applyTexParameters
(
GL_TEXTURE_2D_ARRAY
,
state
);
if
(
texStorageSizedInternalFormat
!=
0
)
if
(
texStorageSizedInternalFormat
!=
0
&&
!
textureObject
->
_allocated
)
{
extensions
->
glTexStorage3D
(
GL_TEXTURE_2D_ARRAY
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
_textureDepth
);
}
...
...
@@ -463,6 +463,8 @@ void Texture2DArray::apply(State& state) const
_sourceFormat
?
_sourceFormat
:
_internalFormat
,
_sourceType
?
_sourceType
:
GL_UNSIGNED_BYTE
,
0
);
textureObject
->
setAllocated
(
_numMipmapLevels
,
texStorageSizedInternalFormat
!=
0
?
texStorageSizedInternalFormat
:
_internalFormat
,
_textureWidth
,
_textureHeight
,
_textureDepth
,
0
);
}
// nothing before, so just unbind the texture target
...
...
src/osg/Texture2DMultisample.cpp
View file @
b8416a7a
...
...
@@ -108,8 +108,10 @@ void Texture2DMultisample::apply(State& state) const
{
textureObject
=
generateAndAssignTextureObject
(
contextID
,
getTextureTarget
(),
1
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
1
,
0
);
textureObject
->
bind
(
state
);
extensions
->
glTexStorage2DMultisample
(
GL_TEXTURE_2D_MULTISAMPLE
,
_numSamples
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
_fixedsamplelocations
);
if
(
!
textureObject
->
_allocated
)
{
extensions
->
glTexStorage2DMultisample
(
GL_TEXTURE_2D_MULTISAMPLE
,
_numSamples
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
_fixedsamplelocations
);
}
}
else
{
...
...
@@ -123,6 +125,7 @@ void Texture2DMultisample::apply(State& state) const
_textureHeight
,
_fixedsamplelocations
);
}
textureObject
->
setAllocated
(
1
,
texStorageSizedInternalFormat
!=
0
?
texStorageSizedInternalFormat
:
_internalFormat
,
_textureWidth
,
_textureHeight
,
1
,
_borderWidth
);
}
else
...
...
src/osg/Texture3D.cpp
View file @
b8416a7a
...
...
@@ -322,8 +322,10 @@ void Texture3D::apply(State& state) const
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_3D
,
_numMipmapLevels
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
_textureDepth
,
0
);
textureObject
->
bind
(
state
);
applyTexParameters
(
GL_TEXTURE_3D
,
state
);
extensions
->
glTexStorage3D
(
GL_TEXTURE_3D
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
_textureDepth
);
if
(
!
textureObject
->
_allocated
)
{
extensions
->
glTexStorage3D
(
GL_TEXTURE_3D
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
_textureDepth
);
}
}
else
{
...
...
@@ -345,6 +347,7 @@ void Texture3D::apply(State& state) const
_readPBuffer
->
bindPBufferToTexture
(
GL_FRONT
);
}
textureObject
->
setAllocated
(
_numMipmapLevels
,
texStorageSizedInternalFormat
!=
0
?
texStorageSizedInternalFormat
:
_internalFormat
,
_textureWidth
,
_textureHeight
,
_textureDepth
,
_borderWidth
);
}
else
{
...
...
src/osg/TextureCubeMap.cpp
View file @
b8416a7a
...
...
@@ -353,7 +353,10 @@ void TextureCubeMap::apply(State& state) const
if
(
texStorageSizedInternalFormat
!=
0
)
{
extensions
->
glTexStorage2D
(
GL_TEXTURE_CUBE_MAP
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
);
if
(
!
textureObject
->
_allocated
)
{
extensions
->
glTexStorage2D
(
GL_TEXTURE_CUBE_MAP
,
osg
::
maximum
(
_numMipmapLevels
,
1
),
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
);
}
}
else
...
...
@@ -367,6 +370,7 @@ void TextureCubeMap::apply(State& state) const
0
);
}
textureObject
->
setAllocated
(
_numMipmapLevels
,
texStorageSizedInternalFormat
!=
0
?
texStorageSizedInternalFormat
:
_internalFormat
,
_textureWidth
,
_textureHeight
,
1
,
0
);
}
else
{
...
...
src/osg/TextureRectangle.cpp
View file @
b8416a7a
...
...
@@ -281,8 +281,10 @@ void TextureRectangle::apply(State& state) const
textureObject
=
generateAndAssignTextureObject
(
contextID
,
GL_TEXTURE_RECTANGLE
,
0
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
,
1
,
0
);
textureObject
->
bind
(
state
);
applyTexParameters
(
GL_TEXTURE_RECTANGLE
,
state
);
extensions
->
glTexStorage2D
(
GL_TEXTURE_RECTANGLE
,
1
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
);
if
(
!
textureObject
->
_allocated
)
{
extensions
->
glTexStorage2D
(
GL_TEXTURE_RECTANGLE
,
1
,
texStorageSizedInternalFormat
,
_textureWidth
,
_textureHeight
);
}
}
else
{
...
...
@@ -303,6 +305,7 @@ void TextureRectangle::apply(State& state) const
_readPBuffer
->
bindPBufferToTexture
(
GL_FRONT
);
}
textureObject
->
setAllocated
(
0
,
texStorageSizedInternalFormat
!=
0
?
texStorageSizedInternalFormat
:
_internalFormat
,
_textureWidth
,
_textureHeight
,
1
,
0
);
}
else
{
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment