void ScriptRenderTexture2D::internal_create(MonoObject* instance, MonoArray* colorSurfaces, ScriptTexture2D* depthStencilSurface) { ScriptArray colorSurfacesList(colorSurfaces); RENDER_SURFACE_DESC depthStencilSurfaceDesc; if (depthStencilSurface != nullptr) { depthStencilSurfaceDesc.face = 0; depthStencilSurfaceDesc.mipLevel = 0; depthStencilSurfaceDesc.numFaces = 1; HTexture textureHandle = depthStencilSurface->getHandle(); if (!textureHandle.isLoaded()) { LOGERR("Render texture must be created using a fully loaded texture."); } else depthStencilSurfaceDesc.texture = textureHandle; } UINT32 numSurfaces = std::min(colorSurfacesList.size(), (UINT32)BS_MAX_MULTIPLE_RENDER_TARGETS); RENDER_TEXTURE_DESC desc; for (UINT32 i = 0; i < numSurfaces; i++) { RENDER_SURFACE_DESC surfaceDesc; surfaceDesc.face = 0; surfaceDesc.mipLevel = 0; surfaceDesc.numFaces = 1; ScriptTexture2D* scriptSurface = colorSurfacesList.get<ScriptTexture2D*>(i); if (scriptSurface != nullptr) { HTexture textureHandle = scriptSurface->getHandle(); if (!textureHandle.isLoaded()) { LOGERR("Render texture must be created using a fully loaded texture."); } else surfaceDesc.texture = textureHandle; } desc.colorSurfaces[i] = surfaceDesc; } desc.depthStencilSurface = depthStencilSurfaceDesc; SPtr<RenderTarget> tex = RenderTexture::create(desc); new (bs_alloc<ScriptRenderTexture2D>()) ScriptRenderTexture2D(tex, instance); }
void ScriptSpriteTexture::internal_createInstance(MonoObject* instance, MonoObject* texture, Vector2* offset, Vector2* scale) { ScriptTexture2D* scriptTexture = ScriptTexture2D::toNative(texture); ScriptSpriteTexture* scriptInstance; if (scriptTexture == nullptr) { ScriptResourceManager::instance().createScriptResource(instance, SpriteTexture::dummy(), &scriptInstance); } else { HSpriteTexture spriteTexture = SpriteTexture::create(*offset, *scale, scriptTexture->getHandle()); ScriptResourceManager::instance().createScriptResource(instance, spriteTexture, &scriptInstance); } }
void ScriptRenderTexture2D::internal_create(MonoObject* instance, MonoArray* colorSurfaces, MonoObject* depthStencilSurface) { ScriptArray colorSurfacesList(colorSurfaces); RENDER_SURFACE_DESC depthStencilSurfaceDesc; ScriptTexture2D* scriptDepthStencilSurface = ScriptTexture2D::toNative(depthStencilSurface); if (scriptDepthStencilSurface != nullptr) { depthStencilSurfaceDesc.face = 0; depthStencilSurfaceDesc.mipLevel = 0; depthStencilSurfaceDesc.numFaces = 1; HTexture textureHandle = scriptDepthStencilSurface->getHandle(); if (!textureHandle.isLoaded()) { LOGERR("Render texture must be created using a fully loaded texture."); } else depthStencilSurfaceDesc.texture = textureHandle; } SPtr<RenderTarget> tex; UINT32 numSurfaces = colorSurfacesList.size(); bool isMulti = numSurfaces > 1; if (isMulti) { MULTI_RENDER_TEXTURE_DESC desc; for (UINT32 i = 0; i < numSurfaces; i++) { RENDER_SURFACE_DESC surfaceDesc; surfaceDesc.face = 0; surfaceDesc.mipLevel = 0; surfaceDesc.numFaces = 1; MonoObject* surfaceObj = colorSurfacesList.get<MonoObject*>(i); ScriptTexture2D* scriptSurface = ScriptTexture2D::toNative(surfaceObj); if (scriptSurface != nullptr) { HTexture textureHandle = scriptSurface->getHandle(); if (!textureHandle.isLoaded()) { LOGERR("Render texture must be created using a fully loaded texture."); } else surfaceDesc.texture = textureHandle; } desc.colorSurfaces.push_back(surfaceDesc); } desc.depthStencilSurface = depthStencilSurfaceDesc; tex = MultiRenderTexture::create(desc); } else { RENDER_SURFACE_DESC surfaceDesc; surfaceDesc.face = 0; surfaceDesc.mipLevel = 0; surfaceDesc.numFaces = 1; if (colorSurfacesList.size() > 0) { MonoObject* surfaceObj = colorSurfacesList.get<MonoObject*>(0); ScriptTexture2D* scriptSurface = ScriptTexture2D::toNative(surfaceObj); if (scriptSurface != nullptr) { HTexture textureHandle = scriptSurface->getHandle(); if (!textureHandle.isLoaded()) { LOGERR("Render texture must be created using a fully loaded texture."); } else surfaceDesc.texture = textureHandle; } } RENDER_TEXTURE_DESC desc; desc.colorSurface = surfaceDesc; desc.depthStencilSurface = depthStencilSurfaceDesc; tex = RenderTexture::create(desc); } new (bs_alloc<ScriptRenderTexture2D>()) ScriptRenderTexture2D(tex, isMulti, instance); }