projects
/
platform
/
core
/
uifw
/
dali-core.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
[Tizen] Regenerating uniform maps fix
[platform/core/uifw/dali-core.git]
/
dali
/
internal
/
render
/
renderers
/
render-renderer.cpp
diff --git
a/dali/internal/render/renderers/render-renderer.cpp
b/dali/internal/render/renderers/render-renderer.cpp
index
ca9724e
..
9324d86
100644
(file)
--- a/
dali/internal/render/renderers/render-renderer.cpp
+++ b/
dali/internal/render/renderers/render-renderer.cpp
@@
-1,5
+1,5
@@
/*
/*
- * Copyright (c) 201
8
Samsung Electronics Co., Ltd.
+ * Copyright (c) 201
9
Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@
-107,7
+107,7
@@
namespace Render
Renderer* Renderer::New( SceneGraph::RenderDataProvider* dataProvider,
Render::Geometry* geometry,
Renderer* Renderer::New( SceneGraph::RenderDataProvider* dataProvider,
Render::Geometry* geometry,
- u
nsigned in
t blendingBitmask,
+ u
int32_
t blendingBitmask,
const Vector4& blendColor,
FaceCullingMode::Type faceCullingMode,
bool preMultipliedAlphaEnabled,
const Vector4& blendColor,
FaceCullingMode::Type faceCullingMode,
bool preMultipliedAlphaEnabled,
@@
-123,7
+123,7
@@
Renderer* Renderer::New( SceneGraph::RenderDataProvider* dataProvider,
Renderer::Renderer( SceneGraph::RenderDataProvider* dataProvider,
Render::Geometry* geometry,
Renderer::Renderer( SceneGraph::RenderDataProvider* dataProvider,
Render::Geometry* geometry,
- u
nsigned in
t blendingBitmask,
+ u
int32_
t blendingBitmask,
const Vector4& blendColor,
FaceCullingMode::Type faceCullingMode,
bool preMultipliedAlphaEnabled,
const Vector4& blendColor,
FaceCullingMode::Type faceCullingMode,
bool preMultipliedAlphaEnabled,
@@
-145,7
+145,8
@@
Renderer::Renderer( SceneGraph::RenderDataProvider* dataProvider,
mDepthWriteMode( depthWriteMode ),
mDepthTestMode( depthTestMode ),
mUpdateAttributesLocation( true ),
mDepthWriteMode( depthWriteMode ),
mDepthTestMode( depthTestMode ),
mUpdateAttributesLocation( true ),
- mPremultipledAlphaEnabled( preMultipliedAlphaEnabled )
+ mPremultipledAlphaEnabled( preMultipliedAlphaEnabled ),
+ mShaderChanged( false )
{
if( blendingBitmask != 0u )
{
{
if( blendingBitmask != 0u )
{
@@
-216,27
+217,31
@@
void Renderer::SetUniforms( BufferIndex bufferIndex, const SceneGraph::NodeDataP
if( uniformMapDataProvider.GetUniformMapChanged( bufferIndex ) ||
node.GetUniformMapChanged(bufferIndex) ||
if( uniformMapDataProvider.GetUniformMapChanged( bufferIndex ) ||
node.GetUniformMapChanged(bufferIndex) ||
- mUniformIndexMap.Count() == 0)
+ mUniformIndexMap.Count() == 0 ||
+ mShaderChanged )
{
{
+ // Reset shader pointer
+ mShaderChanged = false;
+
const SceneGraph::CollectedUniformMap& uniformMap = uniformMapDataProvider.GetUniformMap( bufferIndex );
const SceneGraph::CollectedUniformMap& uniformMapNode = node.GetUniformMap( bufferIndex );
const SceneGraph::CollectedUniformMap& uniformMap = uniformMapDataProvider.GetUniformMap( bufferIndex );
const SceneGraph::CollectedUniformMap& uniformMapNode = node.GetUniformMap( bufferIndex );
- u
nsigned int maxMaps = uniformMap.Count() + uniformMapNode.Count();
+ u
int32_t maxMaps = static_cast<uint32_t>( uniformMap.Count() + uniformMapNode.Count() ); // 4,294,967,295 maps should be enough
mUniformIndexMap.Clear(); // Clear contents, but keep memory if we don't change size
mUniformIndexMap.Resize( maxMaps );
mUniformIndexMap.Clear(); // Clear contents, but keep memory if we don't change size
mUniformIndexMap.Resize( maxMaps );
- u
nsigned int mapIndex(0)
;
+ u
int32_t mapIndex = 0
;
for(; mapIndex < uniformMap.Count() ; ++mapIndex )
{
mUniformIndexMap[mapIndex].propertyValue = uniformMap[mapIndex]->propertyPtr;
mUniformIndexMap[mapIndex].uniformIndex = program.RegisterUniform( uniformMap[mapIndex]->uniformName );
}
for(; mapIndex < uniformMap.Count() ; ++mapIndex )
{
mUniformIndexMap[mapIndex].propertyValue = uniformMap[mapIndex]->propertyPtr;
mUniformIndexMap[mapIndex].uniformIndex = program.RegisterUniform( uniformMap[mapIndex]->uniformName );
}
- for( u
nsigned in
t nodeMapIndex = 0; nodeMapIndex < uniformMapNode.Count() ; ++nodeMapIndex )
+ for( u
int32_
t nodeMapIndex = 0; nodeMapIndex < uniformMapNode.Count() ; ++nodeMapIndex )
{
{
- u
nsigned in
t uniformIndex = program.RegisterUniform( uniformMapNode[nodeMapIndex]->uniformName );
+ u
int32_
t uniformIndex = program.RegisterUniform( uniformMapNode[nodeMapIndex]->uniformName );
bool found(false);
bool found(false);
- for( u
nsigned int i(0)
; i<uniformMap.Count(); ++i )
+ for( u
int32_t i = 0
; i<uniformMap.Count(); ++i )
{
if( mUniformIndexMap[i].uniformIndex == uniformIndex )
{
{
if( mUniformIndexMap[i].uniformIndex == uniformIndex )
{
@@
-342,19
+347,20
@@
void Renderer::SetUniformFromProperty( BufferIndex bufferIndex, Program& program
}
}
}
}
-bool Renderer::BindTextures( Context& context, Program& program )
+bool Renderer::BindTextures( Context& context, Program& program
, Vector<GLuint>& boundTextures
)
{
{
- u
nsigned in
t textureUnit = 0;
+ u
int32_
t textureUnit = 0;
bool result = true;
GLint uniformLocation(-1);
std::vector<Render::Sampler*>& samplers( mRenderDataProvider->GetSamplers() );
std::vector<Render::Texture*>& textures( mRenderDataProvider->GetTextures() );
bool result = true;
GLint uniformLocation(-1);
std::vector<Render::Sampler*>& samplers( mRenderDataProvider->GetSamplers() );
std::vector<Render::Texture*>& textures( mRenderDataProvider->GetTextures() );
- for(
size_t i(0); i<textures.size() && result; ++i )
+ for(
uint32_t i = 0; i < static_cast<uint32_t>( textures.size() ) && result; ++i ) // not expecting more than uint32_t of textures
{
if( textures[i] )
{
result = textures[i]->Bind(context, textureUnit, samplers[i] );
{
if( textures[i] )
{
result = textures[i]->Bind(context, textureUnit, samplers[i] );
+ boundTextures.PushBack( textures[i]->GetId() );
if( result && program.GetSamplerUniformLocation( i, uniformLocation ) )
{
program.SetUniform1i( uniformLocation, textureUnit );
if( result && program.GetSamplerUniformLocation( i, uniformLocation ) )
{
program.SetUniform1i( uniformLocation, textureUnit );
@@
-371,7
+377,7
@@
void Renderer::SetFaceCullingMode( FaceCullingMode::Type mode )
mFaceCullingMode = mode;
}
mFaceCullingMode = mode;
}
-void Renderer::SetBlendingBitMask( u
nsigned in
t bitmask )
+void Renderer::SetBlendingBitMask( u
int32_
t bitmask )
{
mBlendingOptions.SetBitmask( bitmask );
}
{
mBlendingOptions.SetBitmask( bitmask );
}
@@
-381,12
+387,12
@@
void Renderer::SetBlendColor( const Vector4& color )
mBlendingOptions.SetBlendColor( color );
}
mBlendingOptions.SetBlendColor( color );
}
-void Renderer::SetIndexedDrawFirstElement(
size
_t firstElement )
+void Renderer::SetIndexedDrawFirstElement(
uint32
_t firstElement )
{
mIndexedDrawFirstElement = firstElement;
}
{
mIndexedDrawFirstElement = firstElement;
}
-void Renderer::SetIndexedDrawElementsCount(
size
_t elementsCount )
+void Renderer::SetIndexedDrawElementsCount(
uint32
_t elementsCount )
{
mIndexedDrawElementsCount = elementsCount;
}
{
mIndexedDrawElementsCount = elementsCount;
}
@@
-506,6
+512,11
@@
StencilOperation::Type Renderer::GetStencilOperationOnZPass() const
return mStencilParameters.stencilOperationOnZPass;
}
return mStencilParameters.stencilOperationOnZPass;
}
+void Renderer::Upload( Context& context )
+{
+ mGeometry->Upload( context );
+}
+
void Renderer::Render( Context& context,
BufferIndex bufferIndex,
const SceneGraph::NodeDataProvider& node,
void Renderer::Render( Context& context,
BufferIndex bufferIndex,
const SceneGraph::NodeDataProvider& node,
@@
-514,7
+525,8
@@
void Renderer::Render( Context& context,
const Matrix& viewMatrix,
const Matrix& projectionMatrix,
const Vector3& size,
const Matrix& viewMatrix,
const Matrix& projectionMatrix,
const Vector3& size,
- bool blend )
+ bool blend,
+ Vector<GLuint>& boundTextures )
{
// Get the program to use:
Program* program = mRenderDataProvider->GetShader().GetProgram();
{
// Get the program to use:
Program* program = mRenderDataProvider->GetShader().GetProgram();
@@
-533,7
+545,7
@@
void Renderer::Render( Context& context,
// Take the program into use so we can send uniforms to it
program->Use();
// Take the program into use so we can send uniforms to it
program->Use();
- if( DALI_LIKELY( BindTextures( context, *program ) ) )
+ if( DALI_LIKELY( BindTextures( context, *program
, boundTextures
) ) )
{
// Only set up and draw if we have textures and they are all valid
{
// Only set up and draw if we have textures and they are all valid
@@
-564,11
+576,11
@@
void Renderer::Render( Context& context,
mUpdateAttributesLocation = false;
}
mUpdateAttributesLocation = false;
}
- mGeometry->
UploadAnd
Draw( context,
-
bufferIndex,
-
mAttributesLocation,
-
mIndexedDrawFirstElement,
-
mIndexedDrawElementsCount );
+ mGeometry->Draw( context,
+ bufferIndex,
+ mAttributesLocation,
+ mIndexedDrawFirstElement,
+ mIndexedDrawElementsCount );
}
}
}
}
@@
-579,6
+591,11
@@
void Renderer::SetSortAttributes( BufferIndex bufferIndex,
sortAttributes.geometry = mGeometry;
}
sortAttributes.geometry = mGeometry;
}
+void Renderer::SetShaderChanged( bool value )
+{
+ mShaderChanged = value;
+}
+
} // namespace SceneGraph
} // namespace Internal
} // namespace SceneGraph
} // namespace Internal