|
@@ -56,11 +56,14 @@ namespace oxygine
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
+ bool _render2cache = false;
|
|
|
|
|
|
|
|
Vector2 TreeInspectorPreview::render2cache(spActor item, const Vector2& size, bool child)
|
|
Vector2 TreeInspectorPreview::render2cache(spActor item, const Vector2& size, bool child)
|
|
|
{
|
|
{
|
|
|
Material::setCurrent(0);
|
|
Material::setCurrent(0);
|
|
|
|
|
|
|
|
|
|
+ _render2cache = true;
|
|
|
|
|
+
|
|
|
VideoDriverCache &cache = _videoCache;
|
|
VideoDriverCache &cache = _videoCache;
|
|
|
|
|
|
|
|
STDRenderer renderer(&cache);
|
|
STDRenderer renderer(&cache);
|
|
@@ -74,10 +77,17 @@ namespace oxygine
|
|
|
renderer.begin(0);
|
|
renderer.begin(0);
|
|
|
if (child)
|
|
if (child)
|
|
|
{
|
|
{
|
|
|
|
|
+ STDMaterial *originalMat = STDMaterial::instance;
|
|
|
|
|
+
|
|
|
|
|
+ STDMaterial::instance = &mat;
|
|
|
|
|
+
|
|
|
bool vis = item->getVisible();
|
|
bool vis = item->getVisible();
|
|
|
item->setVisible(true);
|
|
item->setVisible(true);
|
|
|
|
|
+ rs.transform = rs.transform * item->getTransformInvert();
|
|
|
item->render(rs);
|
|
item->render(rs);
|
|
|
item->setVisible(vis);
|
|
item->setVisible(vis);
|
|
|
|
|
+
|
|
|
|
|
+ STDMaterial::instance = originalMat;
|
|
|
}
|
|
}
|
|
|
else
|
|
else
|
|
|
item->doRender(rs);
|
|
item->doRender(rs);
|
|
@@ -91,7 +101,7 @@ namespace oxygine
|
|
|
//setSize(30, 30);
|
|
//setSize(30, 30);
|
|
|
|
|
|
|
|
RectF itemRect = cache._bounds;
|
|
RectF itemRect = cache._bounds;
|
|
|
- if (itemRect.isEmpty())
|
|
|
|
|
|
|
+ if (itemRect == RectF::invalidated())
|
|
|
{
|
|
{
|
|
|
itemRect = item->getDestRect();
|
|
itemRect = item->getDestRect();
|
|
|
if (itemRect.isEmpty())
|
|
if (itemRect.isEmpty())
|
|
@@ -108,6 +118,7 @@ namespace oxygine
|
|
|
|
|
|
|
|
cache.transform(transform);
|
|
cache.transform(transform);
|
|
|
|
|
|
|
|
|
|
+ _render2cache = false;
|
|
|
return ns;
|
|
return ns;
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -140,17 +151,23 @@ namespace oxygine
|
|
|
void TreeInspectorPreview::doRender(RenderState const& parentRenderState)
|
|
void TreeInspectorPreview::doRender(RenderState const& parentRenderState)
|
|
|
{
|
|
{
|
|
|
Sprite::doRender(parentRenderState);
|
|
Sprite::doRender(parentRenderState);
|
|
|
|
|
+ Material::setCurrent(0);
|
|
|
|
|
|
|
|
STDMaterial::instance->getRenderer()->drawBatch();
|
|
STDMaterial::instance->getRenderer()->drawBatch();
|
|
|
|
|
+ if (getParent() == getStage().get())
|
|
|
|
|
+ {
|
|
|
|
|
+ int q = 0;
|
|
|
|
|
+ }
|
|
|
_videoCache.render(parentRenderState.transform);
|
|
_videoCache.render(parentRenderState.transform);
|
|
|
STDMaterial::instance->getRenderer()->drawBatch();
|
|
STDMaterial::instance->getRenderer()->drawBatch();
|
|
|
STDMaterial::instance->getRenderer()->resetSettings();
|
|
STDMaterial::instance->getRenderer()->resetSettings();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- VideoDriverCache::VideoDriverCache() : _bounds(0, 0, 0, 0)
|
|
|
|
|
|
|
+ VideoDriverCache::VideoDriverCache()
|
|
|
{
|
|
{
|
|
|
_batches.push_back(cached_batch());
|
|
_batches.push_back(cached_batch());
|
|
|
rt = new NativeTextureNull;
|
|
rt = new NativeTextureNull;
|
|
|
|
|
+ _bounds = RectF::invalidated();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
VideoDriverCache::~VideoDriverCache()
|
|
VideoDriverCache::~VideoDriverCache()
|
|
@@ -278,6 +295,19 @@ namespace oxygine
|
|
|
|
|
|
|
|
void VideoDriverCache::nextBatch()
|
|
void VideoDriverCache::nextBatch()
|
|
|
{
|
|
{
|
|
|
|
|
+ const vertexPCT2* v = (const vertexPCT2*)(¤t().vertices.front());
|
|
|
|
|
+
|
|
|
|
|
+ size_t num = current().vertices.size() / current().vdecl->size;
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
|
|
+ for (size_t i = 0; i != num; ++i)
|
|
|
|
|
+ {
|
|
|
|
|
+ v = (const vertexPCT2*)(¤t().vertices.front() + current().vdecl->size * i);
|
|
|
|
|
+ RectF f(v->x, v->y, 0, 0);
|
|
|
|
|
+ _bounds.unite(f);
|
|
|
|
|
+ }
|
|
|
|
|
+
|
|
|
|
|
+
|
|
|
_batches.push_back(cached_batch());
|
|
_batches.push_back(cached_batch());
|
|
|
cached_batch &b = _batches.back();
|
|
cached_batch &b = _batches.back();
|
|
|
b = _batches[_batches.size() - 2];
|
|
b = _batches[_batches.size() - 2];
|
|
@@ -299,21 +329,6 @@ namespace oxygine
|
|
|
current().vertices.assign((const char*)verticesData, (const char*)verticesData + decl->size * numVertices);
|
|
current().vertices.assign((const char*)verticesData, (const char*)verticesData + decl->size * numVertices);
|
|
|
current().indices.assign(indicesData, indicesData + numIndices);
|
|
current().indices.assign(indicesData, indicesData + numIndices);
|
|
|
|
|
|
|
|
- const vertexPCT2* v = (const vertexPCT2*)(¤t().vertices.front());
|
|
|
|
|
- if (_batches.size() == 1)
|
|
|
|
|
- {
|
|
|
|
|
- OX_ASSERT(current().vertices.size());
|
|
|
|
|
- _bounds = RectF(v->x, v->y, 0, 0);
|
|
|
|
|
- }
|
|
|
|
|
-
|
|
|
|
|
- size_t num = current().vertices.size() / current().vdecl->size;
|
|
|
|
|
-
|
|
|
|
|
- for (size_t i = 0; i != num; ++i)
|
|
|
|
|
- {
|
|
|
|
|
- v = (const vertexPCT2*)(¤t().vertices.front() + current().vdecl->size * i);
|
|
|
|
|
- RectF f(v->x, v->y, 0, 0);
|
|
|
|
|
- _bounds.unite(f);
|
|
|
|
|
- }
|
|
|
|
|
nextBatch();
|
|
nextBatch();
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -397,8 +412,13 @@ namespace oxygine
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
- void VideoDriverCache::transform(const AffineTransform& m)
|
|
|
|
|
|
|
+ void VideoDriverCache::transform(const AffineTransform& transform)
|
|
|
{
|
|
{
|
|
|
|
|
+ /*
|
|
|
|
|
+ AffineTransform transform;
|
|
|
|
|
+ transform.identity();
|
|
|
|
|
+ */
|
|
|
|
|
+
|
|
|
for (batches::iterator i = _batches.begin(); i != _batches.end(); ++i)
|
|
for (batches::iterator i = _batches.begin(); i != _batches.end(); ++i)
|
|
|
{
|
|
{
|
|
|
cached_batch& b = *i;
|
|
cached_batch& b = *i;
|
|
@@ -412,7 +432,7 @@ namespace oxygine
|
|
|
for (size_t i = 0; i != num; ++i)
|
|
for (size_t i = 0; i != num; ++i)
|
|
|
{
|
|
{
|
|
|
vertexPCT2* v = (vertexPCT2*)(&modified.front() + b.vdecl->size * i);
|
|
vertexPCT2* v = (vertexPCT2*)(&modified.front() + b.vdecl->size * i);
|
|
|
- Vector2 np = m.transform(Vector2(v->x, v->y));
|
|
|
|
|
|
|
+ Vector2 np = transform.transform(Vector2(v->x, v->y));
|
|
|
v->x = np.x;
|
|
v->x = np.x;
|
|
|
v->y = np.y;
|
|
v->y = np.y;
|
|
|
}
|
|
}
|