summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/runtime/Qt3DSQmlEngine.cpp87
-rw-r--r--src/runtimerender/Qt3DSRenderer.h4
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp8
-rw-r--r--src/runtimerender/rendererimpl/Qt3DSRendererImpl.h4
4 files changed, 59 insertions, 44 deletions
diff --git a/src/runtime/Qt3DSQmlEngine.cpp b/src/runtime/Qt3DSQmlEngine.cpp
index 994f6c1..d5808ed 100644
--- a/src/runtime/Qt3DSQmlEngine.cpp
+++ b/src/runtime/Qt3DSQmlEngine.cpp
@@ -1806,49 +1806,64 @@ void CQmlEngineImpl::deleteMeshes(const QStringList &meshNames,
uint CQmlEngineImpl::textureId(const QString &elementPath,
qt3ds::render::IQt3DSRenderer *renderer)
{
- TElement *elem = getTarget(elementPath.toUtf8().constData());
- if (elem) {
- auto translator = static_cast<qt3ds::render::Qt3DSTranslator *>(elem->GetAssociation());
- if (translator) {
- qt3ds::render::GraphObjectTypes::Enum type = translator->GetUIPType();
- if (type == qt3ds::render::GraphObjectTypes::Layer) {
- auto layer = static_cast<qt3ds::render::SLayer *>(&translator->RenderObject());
- return renderer->getLayerTextureId(*layer);
- } else if (type == qt3ds::render::GraphObjectTypes::Image) {
- auto image = static_cast<qt3ds::render::SImage *>(&translator->RenderObject());
- if (image->m_TextureData.m_Texture) {
- return static_cast<uint>(reinterpret_cast<size_t>(
- image->m_TextureData.m_Texture->GetTextureObjectHandle()));
- }
- }
- }
- }
- return 0;
+ QSize size;
+ GLenum format;
+ return textureId(elementPath, renderer, size, format);
}
uint CQmlEngineImpl::textureId(const QString &elementPath, qt3ds::render::IQt3DSRenderer *renderer,
QSize &size, GLenum &format)
{
- TElement *elem = getTarget(elementPath.toUtf8().constData());
- if (elem) {
- auto translator = static_cast<qt3ds::render::Qt3DSTranslator *>(elem->GetAssociation());
- if (translator) {
- qt3ds::render::GraphObjectTypes::Enum elemType = translator->GetUIPType();
- if (elemType == qt3ds::render::GraphObjectTypes::Layer) {
- auto layer = static_cast<qt3ds::render::SLayer *>(&translator->RenderObject());
- auto texdetails = renderer->getLayerTextureDetails(*layer);
- size = QSize(texdetails.m_Width, texdetails.m_Height);
- // Assume that NVRenderTextureFormats enums match GL texture format enums
- format = renderer->getTextureGlFormat(texdetails.m_Format);
- return renderer->getLayerTextureId(*layer);
- } else if (elemType == qt3ds::render::GraphObjectTypes::Image) {
- auto image = static_cast<qt3ds::render::SImage *>(&translator->RenderObject());
- if (image->m_TextureData.m_Texture) {
- auto texdetails = image->m_TextureData.m_Texture->GetTextureDetails();
+ auto subpresLayer = elementPath.split(QStringLiteral("::"));
+ if (subpresLayer.size() == 2) {
+ // This is true only for subpresentation layers
+ // First retrieve the main layer
+ TElement *mainPresentationLayer = getTarget(subpresLayer[0].toUtf8().constData());
+ if (!mainPresentationLayer)
+ return 0;
+ auto mainLayerTranslator = static_cast<qt3ds::render::Qt3DSTranslator *>(mainPresentationLayer->GetAssociation());
+ auto mainLayerTranslatorType = mainLayerTranslator->GetUIPType();
+ if (mainLayerTranslatorType != qt3ds::render::GraphObjectTypes::Layer)
+ return 0;
+ auto mainLayer = static_cast<qt3ds::render::SLayer *>(&mainLayerTranslator->RenderObject());
+
+ // Now retrieve the subpresentation layer being queried
+ TElement *subPresentationLayer = getTarget(subpresLayer[1].toUtf8().constData());
+ if (!subPresentationLayer)
+ return 0;
+ auto subpresLayerTranslator = static_cast<qt3ds::render::Qt3DSTranslator *>(subPresentationLayer->GetAssociation());
+ auto subpresLayerTranslatorType = subpresLayerTranslator->GetUIPType();
+ if (subpresLayerTranslatorType != qt3ds::render::GraphObjectTypes::Layer)
+ return 0;
+ auto subpresLayer = static_cast<qt3ds::render::SLayer *>(&subpresLayerTranslator->RenderObject());
+
+ auto texdetails = renderer->getLayerTextureDetails(*subpresLayer, mainLayer);
+ size = QSize(texdetails.m_Width, texdetails.m_Height);
+ // Assume that NVRenderTextureFormats enums match GL texture format enums
+ format = renderer->getTextureGlFormat(texdetails.m_Format);
+ return renderer->getLayerTextureId(*subpresLayer, mainLayer);
+ } else {
+ TElement *elem = getTarget(elementPath.toUtf8().constData());
+ if (elem) {
+ auto translator = static_cast<qt3ds::render::Qt3DSTranslator *>(elem->GetAssociation());
+ if (translator) {
+ qt3ds::render::GraphObjectTypes::Enum elemType = translator->GetUIPType();
+ if (elemType == qt3ds::render::GraphObjectTypes::Layer) {
+ auto layer = static_cast<qt3ds::render::SLayer *>(&translator->RenderObject());
+ auto texdetails = renderer->getLayerTextureDetails(*layer);
size = QSize(texdetails.m_Width, texdetails.m_Height);
+ // Assume that NVRenderTextureFormats enums match GL texture format enums
format = renderer->getTextureGlFormat(texdetails.m_Format);
- return static_cast<uint>(reinterpret_cast<size_t>(
- image->m_TextureData.m_Texture->GetTextureObjectHandle()));
+ return renderer->getLayerTextureId(*layer);
+ } else if (elemType == qt3ds::render::GraphObjectTypes::Image) {
+ auto image = static_cast<qt3ds::render::SImage *>(&translator->RenderObject());
+ if (image->m_TextureData.m_Texture) {
+ auto texdetails = image->m_TextureData.m_Texture->GetTextureDetails();
+ size = QSize(texdetails.m_Width, texdetails.m_Height);
+ format = renderer->getTextureGlFormat(texdetails.m_Format);
+ return static_cast<uint>(reinterpret_cast<size_t>(
+ image->m_TextureData.m_Texture->GetTextureObjectHandle()));
+ }
}
}
}
diff --git a/src/runtimerender/Qt3DSRenderer.h b/src/runtimerender/Qt3DSRenderer.h
index 50c27c3..383267c 100644
--- a/src/runtimerender/Qt3DSRenderer.h
+++ b/src/runtimerender/Qt3DSRenderer.h
@@ -170,11 +170,11 @@ namespace render {
const QT3DSVec3 &inMouseVec) const = 0;
virtual QT3DSVec3 ProjectPosition(SNode &inNode, const QT3DSVec3 &inPosition) const = 0;
- virtual uint getLayerTextureId(SLayer &layer) = 0;
+ virtual uint getLayerTextureId(SLayer &layer, const SRenderInstanceId id = nullptr) = 0;
virtual GLenum getTextureGlFormat(NVRenderTextureFormats::Enum internalFormat) = 0;
- virtual STextureDetails getLayerTextureDetails(SLayer &layer) = 0;
+ virtual STextureDetails getLayerTextureDetails(SLayer &layer, const SRenderInstanceId id = nullptr) = 0;
// Roughly equivalent of gluPickMatrix, allows users to setup a perspective transform that
// will draw some sub component
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
index a8b6a4f..ad9b227 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.cpp
@@ -968,9 +968,9 @@ namespace render {
return mouseVec;
}
- uint Qt3DSRendererImpl::getLayerTextureId(SLayer &layer)
+ uint Qt3DSRendererImpl::getLayerTextureId(SLayer &layer, const SRenderInstanceId id)
{
- SLayerRenderData *data = GetOrCreateLayerRenderDataForNode(layer);
+ SLayerRenderData *data = GetOrCreateLayerRenderDataForNode(layer, id);
if (data->m_LayerCachedTexture) {
return static_cast<uint>(reinterpret_cast<size_t>(
data->m_LayerCachedTexture->GetTextureObjectHandle()));
@@ -1003,9 +1003,9 @@ namespace render {
}
}
- STextureDetails Qt3DSRendererImpl::getLayerTextureDetails(SLayer &inLayer)
+ STextureDetails Qt3DSRendererImpl::getLayerTextureDetails(SLayer &inLayer, const SRenderInstanceId id)
{
- SLayerRenderData *theData = GetOrCreateLayerRenderDataForNode(inLayer);
+ SLayerRenderData *theData = GetOrCreateLayerRenderDataForNode(inLayer, id);
if (theData->m_LayerCachedTexture)
return theData->m_LayerCachedTexture->GetTextureDetails();
diff --git a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
index decd7fd..d3048ea 100644
--- a/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
+++ b/src/runtimerender/rendererimpl/Qt3DSRendererImpl.h
@@ -386,9 +386,9 @@ namespace render {
const QT3DSVec3 &inMouseVec) const override;
QT3DSVec3 ProjectPosition(SNode &inNode, const QT3DSVec3 &inPosition) const override;
- uint getLayerTextureId(SLayer &layer) override;
+ uint getLayerTextureId(SLayer &layer, const SRenderInstanceId id) override;
- STextureDetails getLayerTextureDetails(SLayer &inLayer) override;
+ STextureDetails getLayerTextureDetails(SLayer &inLayer, const SRenderInstanceId id) override;
GLenum getTextureGlFormat(NVRenderTextureFormats::Enum internalFormat) override;