1
0
mirror of https://github.com/blawar/GLideN64.git synced 2024-06-25 22:09:35 +00:00

Display save/load progress for combiners shaders

Display "init noise texture" message. Progress is hard to display because noise textures generated in threads.
This commit is contained in:
Sergey Lipskiy 2017-10-26 00:20:53 +07:00
parent aba3fefe63
commit 7e4271d991
15 changed files with 116 additions and 51 deletions

View File

@ -319,6 +319,7 @@ copy /Y "$(ProjectDir)$(OutDir)$(TargetName).*" "$(Mupen64PluginsDir)"</Command>
<ClCompile Include="..\..\src\DepthBuffer.cpp" />
<ClCompile Include="..\..\src\DepthBufferRender\ClipPolygon.cpp" />
<ClCompile Include="..\..\src\DepthBufferRender\DepthBufferRender.cpp" />
<ClCompile Include="..\..\src\DisplayLoadProgress.cpp" />
<ClCompile Include="..\..\src\DisplayWindow.cpp" />
<ClCompile Include="..\..\src\FrameBuffer.cpp" />
<ClCompile Include="..\..\src\FrameBufferInfo.cpp" />
@ -463,6 +464,7 @@ copy /Y "$(ProjectDir)$(OutDir)$(TargetName).*" "$(Mupen64PluginsDir)"</Command>
<ClInclude Include="..\..\src\DepthBuffer.h" />
<ClInclude Include="..\..\src\DepthBufferRender\ClipPolygon.h" />
<ClInclude Include="..\..\src\DepthBufferRender\DepthBufferRender.h" />
<ClInclude Include="..\..\src\DisplayLoadProgress.h" />
<ClInclude Include="..\..\src\DisplayWindow.h" />
<ClInclude Include="..\..\src\FrameBuffer.h" />
<ClInclude Include="..\..\src\FrameBufferInfo.h" />

View File

@ -374,6 +374,9 @@
<ClCompile Include="..\..\src\uCodes\F3DZEX2.cpp">
<Filter>Source Files\uCodes</Filter>
</ClCompile>
<ClCompile Include="..\..\src\DisplayLoadProgress.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\3DMath.h">
@ -694,5 +697,8 @@
<ClInclude Include="..\..\src\uCodes\F3DZEX2.h">
<Filter>Header Files\uCodes</Filter>
</ClInclude>
<ClInclude Include="..\..\src\DisplayLoadProgress.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -316,6 +316,7 @@ copy /Y "$(ProjectDir)$(OutDir)$(TargetName).*" "$(Mupen64PluginsDir)"</Command>
<ClCompile Include="..\..\src\DepthBuffer.cpp" />
<ClCompile Include="..\..\src\DepthBufferRender\ClipPolygon.cpp" />
<ClCompile Include="..\..\src\DepthBufferRender\DepthBufferRender.cpp" />
<ClCompile Include="..\..\src\DisplayLoadProgress.cpp" />
<ClCompile Include="..\..\src\DisplayWindow.cpp" />
<ClCompile Include="..\..\src\FrameBuffer.cpp" />
<ClCompile Include="..\..\src\FrameBufferInfo.cpp" />
@ -460,6 +461,7 @@ copy /Y "$(ProjectDir)$(OutDir)$(TargetName).*" "$(Mupen64PluginsDir)"</Command>
<ClInclude Include="..\..\src\DepthBuffer.h" />
<ClInclude Include="..\..\src\DepthBufferRender\ClipPolygon.h" />
<ClInclude Include="..\..\src\DepthBufferRender\DepthBufferRender.h" />
<ClInclude Include="..\..\src\DisplayLoadProgress.h" />
<ClInclude Include="..\..\src\DisplayWindow.h" />
<ClInclude Include="..\..\src\FrameBuffer.h" />
<ClInclude Include="..\..\src\FrameBufferInfo.h" />

View File

@ -374,6 +374,9 @@
<ClCompile Include="..\..\src\uCodes\F3DZEX2.cpp">
<Filter>Source Files\uCodes</Filter>
</ClCompile>
<ClCompile Include="..\..\src\DisplayLoadProgress.cpp">
<Filter>Source Files</Filter>
</ClCompile>
</ItemGroup>
<ItemGroup>
<ClInclude Include="..\..\src\3DMath.h">
@ -694,5 +697,8 @@
<ClInclude Include="..\..\src\uCodes\F3DZEX2.h">
<Filter>Header Files\uCodes</Filter>
</ClInclude>
<ClInclude Include="..\..\src\DisplayLoadProgress.h">
<Filter>Header Files</Filter>
</ClInclude>
</ItemGroup>
</Project>

View File

@ -23,6 +23,7 @@ set(GLideN64_SOURCES
Debugger.cpp
DepthBuffer.cpp
DisplayWindow.cpp
DisplayLoadProgress.cpp
FrameBuffer.cpp
FrameBufferInfo.cpp
GBI.cpp

View File

@ -0,0 +1,46 @@
#include <stdarg.h>
#include "GLideNHQ/Ext_TxFilter.h"
#include <Graphics/Context.h>
#include <Graphics/Parameters.h>
#include "FrameBuffer.h"
#include "DisplayWindow.h"
#include "DisplayLoadProgress.h"
void displayLoadProgress(const wchar_t *format, ...)
{
va_list args;
wchar_t wbuf[INFO_BUF];
char buf[INFO_BUF];
// process input
#ifdef OS_ANDROID
const u32 bufSize = 2048;
char cbuf[bufSize];
char fmt[bufSize];
wcstombs(fmt, format, bufSize);
va_start(args, format);
vsprintf(cbuf, fmt, args);
va_end(args);
mbstowcs(wbuf, cbuf, INFO_BUF);
#else
va_start(args, format);
vswprintf(wbuf, INFO_BUF, format, args);
va_end(args);
#endif
// XXX: convert to multibyte
wcstombs(buf, wbuf, INFO_BUF);
FrameBuffer* pBuffer = frameBufferList().getCurrent();
if (pBuffer != nullptr)
gfxContext.bindFramebuffer(graphics::bufferTarget::DRAW_FRAMEBUFFER, graphics::ObjectHandle::null);
GraphicsDrawer & drawer = dwnd().getDrawer();
drawer.clearColorBuffer(nullptr);
drawer.drawText(buf, -0.9f, 0);
dwnd().swapBuffers();
if (pBuffer != nullptr)
gfxContext.bindFramebuffer(graphics::bufferTarget::DRAW_FRAMEBUFFER, pBuffer->m_FBO);
}

View File

@ -0,0 +1,6 @@
#ifndef DISPLAYLOADPROGRESS_H
#define DISPLAYLOADPROGRESS_H
void displayLoadProgress(const wchar_t *format, ...);
#endif // DISPLAYLOADPROGRESS_H

View File

@ -11,6 +11,7 @@
#include <RSP.h>
#include <PluginAPI.h>
#include <Combiner.h>
#include <DisplayLoadProgress.h>
#include <osal_files.h>
#include "glsl_Utils.h"
#include "glsl_ShaderStorage.h"
@ -102,18 +103,20 @@ bool ShaderStorage::saveShadersStorage(const graphics::Combiners & _combiners) c
shadersOut.write((char*)&len, sizeof(len));
shadersOut.write(strGLVersion, len);
displayLoadProgress(L"SAVE COMBINER SHADERS %.1f\%", 0.0f);
len = _combiners.size();
#if 0
fout.write((char*)&len, sizeof(len));
for (auto cur = _combiners.begin(); cur != _combiners.end(); ++cur)
fout << *(cur->second);
#else
u32 totalWritten = 0;
std::vector<char> allShaderData;
std::vector<u64> keysData;
keysData.reserve(len);
const f32 percent = len / 100.0f;
const f32 step = 100.0f / len;
f32 progress = 0.0f;
f32 percents = percent;
for (auto cur = _combiners.begin(); cur != _combiners.end(); ++cur)
{
std::vector<char> data;
@ -122,6 +125,11 @@ bool ShaderStorage::saveShadersStorage(const graphics::Combiners & _combiners) c
keysData.push_back(cur->first.getMux());
allShaderData.insert(allShaderData.end(), data.begin(), data.end());
++totalWritten;
progress += step;
if (progress > percents) {
displayLoadProgress(L"SAVE COMBINER SHADERS %.1f\%", f32(totalWritten) * 100.f / f32(len));
percents += percent;
}
}
else
{
@ -135,11 +143,10 @@ bool ShaderStorage::saveShadersStorage(const graphics::Combiners & _combiners) c
std::sort(keysData.begin(), keysData.end());
keysOut << "0x" << std::hex << std::setfill('0') << std::setw(8) << m_keysFormatVersion << "\n";
keysOut << "0x" << std::hex << std::setfill('0') << std::setw(8) << totalWritten << "\n";
for (u64 key : keysData)
keysOut << "0x" << std::hex << std::setfill('0') << std::setw(16) << key << "\n";
#endif
shadersOut.flush();
shadersOut.close();
keysOut.flush();
@ -197,12 +204,25 @@ bool ShaderStorage::_loadFromCombinerKeys(graphics::Combiners & _combiners)
if (version != m_keysFormatVersion)
return false;
displayLoadProgress(L"LOAD COMBINER SHADERS %.1f\%", 0.0f);
u32 len;
fin >> std::hex >> len;
const f32 percent = len / 100.0f;
const f32 step = 100.0f / len;
f32 progress = 0.0f;
f32 percents = percent;
u64 key;
while (!fin.eof()) {
for (u32 i = 0; i < len; ++i) {
fin >> std::hex >> key;
graphics::CombinerProgram * pCombiner = Combiner_Compile(CombinerKey(key, false));
pCombiner->update(true);
_combiners[pCombiner->getKey()] = pCombiner;
progress += step;
if (progress > percents) {
displayLoadProgress(L"LOAD COMBINER SHADERS %.1f\%", f32(i + 1) * 100.f / f32(len));
percents += percent;
}
}
fin.close();
@ -255,13 +275,23 @@ bool ShaderStorage::loadShadersStorage(graphics::Combiners & _combiners)
if (strncmp(strGLVersion, strBuf.data(), len) != 0)
return _loadFromCombinerKeys(_combiners);
displayLoadProgress(L"LOAD COMBINER SHADERS %.1f\%", 0.0f);
CombinerProgramUniformFactory uniformFactory(m_glinfo);
fin.read((char*)&len, sizeof(len));
const f32 percent = len / 100.0f;
const f32 step = 100.0f / len;
f32 progress = 0.0f;
f32 percents = percent;
for (u32 i = 0; i < len; ++i) {
CombinerProgramImpl * pCombiner = _readCominerProgramFromStream(fin, uniformFactory, m_useProgram);
pCombiner->update(true);
_combiners[pCombiner->getKey()] = pCombiner;
progress += step;
if (progress > percents) {
displayLoadProgress(L"LOAD COMBINER SHADERS %.1f\%", f32(i + 1) * 100.f / f32(len) );
percents += percent;
}
}
}
catch (...) {

View File

@ -20,7 +20,7 @@ namespace glsl {
bool _loadFromCombinerKeys(graphics::Combiners & _combiners);
const u32 m_formatVersion = 0x14U;
const u32 m_keysFormatVersion = 0x01;
const u32 m_keysFormatVersion = 0x02;
const opengl::GLInfo & m_glinfo;
opengl::CachedUseProgram * m_useProgram;
};

View File

@ -1603,10 +1603,10 @@ void GraphicsDrawer::_initData()
_setSpecialTexrect();
textureCache().init();
g_textDrawer.init();
DepthBuffer_Init();
FrameBuffer_Init();
Combiner_Init();
g_textDrawer.init();
TFH.init();
PostProcessor::get().init();
g_zlutTexture.init();
@ -1639,9 +1639,9 @@ void GraphicsDrawer::_destroyData()
PostProcessor::get().destroy();
if (TFH.optionsChanged())
TFH.shutdown();
g_textDrawer.destroy();
Combiner_Destroy();
FrameBuffer_Destroy();
DepthBuffer_Destroy();
g_textDrawer.destroy();
textureCache().destroy();
}

View File

@ -17,6 +17,7 @@
#include "Textures.h"
#include "NoiseTexture.h"
#include "DisplayWindow.h"
#include "DisplayLoadProgress.h"
using namespace graphics;
@ -63,6 +64,8 @@ void NoiseTexture::init()
if (config.generalEmulation.enableNoise == 0)
return;
displayLoadProgress(L"INIT NOISE TEXTURES. PLEASE WAIT...");
NoiseTexturesData texData;
for (auto& vec : texData)
vec.resize(NOISE_TEX_WIDTH * NOISE_TEX_HEIGHT);

View File

@ -9,6 +9,7 @@
#include "FrameBuffer.h"
#include "TextureFilterHandler.h"
#include "DisplayWindow.h"
#include "DisplayLoadProgress.h"
#include "wst.h"
static
@ -40,44 +41,6 @@ u32 textureEnhancements[] = {
BRZ6X_ENHANCEMENT //"6XBRZ"
};
void displayLoadProgress(const wchar_t *format, ...)
{
va_list args;
wchar_t wbuf[INFO_BUF];
char buf[INFO_BUF];
// process input
#ifdef OS_ANDROID
const u32 bufSize = 2048;
char cbuf[bufSize];
char fmt[bufSize];
wcstombs(fmt, format, bufSize);
va_start(args, format);
vsprintf(cbuf, fmt, args);
va_end(args);
mbstowcs(wbuf, cbuf, INFO_BUF);
#else
va_start(args, format);
vswprintf(wbuf, INFO_BUF, format, args);
va_end(args);
#endif
// XXX: convert to multibyte
wcstombs(buf, wbuf, INFO_BUF);
FrameBuffer* pBuffer = frameBufferList().getCurrent();
if (pBuffer != nullptr)
gfxContext.bindFramebuffer(graphics::bufferTarget::DRAW_FRAMEBUFFER, graphics::ObjectHandle::null);
GraphicsDrawer & drawer = dwnd().getDrawer();
drawer.clearColorBuffer(nullptr);
drawer.drawText(buf, -0.9f, 0);
dwnd().swapBuffers();
if (pBuffer != nullptr)
gfxContext.bindFramebuffer(graphics::bufferTarget::DRAW_FRAMEBUFFER, pBuffer->m_FBO);
}
u32 TextureFilterHandler::_getConfigOptions() const
{
u32 options = textureFilters[config.textureFilter.txFilterMode] | textureEnhancements[config.textureFilter.txEnhancementMode];

View File

@ -19,8 +19,6 @@ private:
u32 m_options;
};
void displayLoadProgress(const wchar_t *format, ...);
extern TextureFilterHandler TFH;
#endif // TEXTUREFILTERHANDLER_H

View File

@ -16,6 +16,7 @@
#include "Keys.h"
#include "GLideNHQ/Ext_TxFilter.h"
#include "TextureFilterHandler.h"
#include "DisplayLoadProgress.h"
#include "Graphics/Context.h"
#include "Graphics/Parameters.h"
#include "DisplayWindow.h"

View File

@ -28,6 +28,7 @@ MY_LOCAL_SRC_FILES :=
$(SRCDIR)/Debugger.cpp \
$(SRCDIR)/DepthBuffer.cpp \
$(SRCDIR)/DisplayWindow.cpp \
$(SRCDIR)/DisplayLoadProgress.cpp \
$(SRCDIR)/FrameBuffer.cpp \
$(SRCDIR)/FrameBufferInfo.cpp \
$(SRCDIR)/GBI.cpp \