void Graphics::FreeScratchBuffer(void* buffer) { if (!buffer) return; for (Vector<ScratchBuffer>::Iterator i = scratchBuffers_.Begin(); i != scratchBuffers_.End(); ++i) { if (i->reserved_ && i->data_.Get() == buffer) { i->reserved_ = false; return; } } URHO3D_LOGWARNING("Reserved scratch buffer " + ToStringHex((unsigned)(size_t)buffer) + " not found"); }
void Graphics::FreeScratchBuffer(void* buffer) { if (!buffer) return; for (ScratchBuffer & elem : scratchBuffers_) { if (elem.reserved_ && elem.data_.get() == buffer) { elem.reserved_ = false; return; } } URHO3D_LOGWARNING("Reserved scratch buffer " + ToStringHex((unsigned)(size_t)buffer) + " not found"); }
String ToString(void* value) { return ToStringHex((unsigned)(size_t)value); }
bool ShaderVariation::Create() { Release(); if (!graphics_) return false; if (!owner_) { compilerOutput_ = "Owner shader has expired"; return false; } // Check for up-to-date bytecode on disk String path, name, extension; SplitPath(owner_->GetName(), path, name, extension); extension = type_ == VS ? ".vs3" : ".ps3"; String binaryShaderName = graphics_->GetShaderCacheDir() + name + "_" + StringHash(defines_).ToString() + extension; if (!LoadByteCode(binaryShaderName)) { // Compile shader if don't have valid bytecode if (!Compile()) return false; // Save the bytecode after successful compile, but not if the source is from a package if (owner_->GetTimeStamp()) SaveByteCode(binaryShaderName); } // Then create shader from the bytecode IDirect3DDevice9* device = graphics_->GetImpl()->GetDevice(); if (type_ == VS) { HRESULT hr = device->CreateVertexShader( (const DWORD*)&byteCode_[0], (IDirect3DVertexShader9**)&object_.ptr_); if (FAILED(hr)) { ATOMIC_SAFE_RELEASE(object_.ptr_); compilerOutput_ = "Could not create vertex shader (HRESULT " + ToStringHex((unsigned)hr) + ")"; } } else { HRESULT hr = device->CreatePixelShader( (const DWORD*)&byteCode_[0], (IDirect3DPixelShader9**)&object_.ptr_); if (FAILED(hr)) { ATOMIC_SAFE_RELEASE(object_.ptr_); compilerOutput_ = "Could not create pixel shader (HRESULT " + ToStringHex((unsigned)hr) + ")"; } } // The bytecode is not needed on Direct3D9 after creation, so delete it to save memory byteCode_.Clear(); byteCode_.Reserve(0); return object_.ptr_ != 0; }