Working on web version
This commit is contained in:
1 parent
3d3c3b2a36
commit
e310822462
20 files changed
+432
-328
No files matched your search
@@ -329,6 +329,16 @@ namespace ZL {
|
||||
size_t error = glGetError();
|
||||
if (error != GL_NO_ERROR)
|
||||
{
|
||||
std::cout << "OpenGL error: " << error << std::endl;
|
||||
throw std::runtime_error("Gl error");
|
||||
}
|
||||
}
|
||||
void CheckGlError(const char* file, int line)
|
||||
{
|
||||
size_t error = glGetError();
|
||||
if (error != GL_NO_ERROR)
|
||||
{
|
||||
std::cout << "OpenGL error: " << error << " happened in file: " << file << " at line: " << line << std::endl;
|
||||
throw std::runtime_error("Gl error");
|
||||
}
|
||||
}
|
||||
|
||||
@@ -161,4 +161,6 @@ namespace ZL {
|
||||
bool BindOpenGlFunctions();
|
||||
|
||||
void CheckGlError();
|
||||
|
||||
void CheckGlError(const char* file, int line);
|
||||
}
|
||||
@@ -536,7 +536,7 @@ namespace ZL {
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glDepthFunc(GL_LEQUAL);
|
||||
|
||||
CheckGlError();
|
||||
CheckGlError(__FILE__, __LINE__);
|
||||
}
|
||||
|
||||
void Renderer::PushProjectionMatrix(float width, float height, float zNear, float zFar)
|
||||
|
||||
@@ -56,6 +56,22 @@ namespace ZL {
|
||||
{
|
||||
glGenFramebuffers(1, &fbo);
|
||||
|
||||
#ifdef EMSCRIPTEN
|
||||
glGenTextures(1, &depthTexture);
|
||||
glBindTexture(GL_TEXTURE_2D, depthTexture);
|
||||
|
||||
// Используем GL_DEPTH_COMPONENT24 для WebGL 2
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT24,
|
||||
resolution, resolution, 0,
|
||||
GL_DEPTH_COMPONENT, GL_UNSIGNED_INT, NULL);
|
||||
|
||||
// ВАЖНО: Используем GL_NEAREST, так как GL_LINEAR часто ломает FBO в WebGL
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, GL_NEAREST);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_NEAREST);
|
||||
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
#else
|
||||
glGenTextures(1, &depthTexture);
|
||||
glBindTexture(GL_TEXTURE_2D, depthTexture);
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_DEPTH_COMPONENT,
|
||||
@@ -65,17 +81,24 @@ namespace ZL {
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE);
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE);
|
||||
|
||||
#endif
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, fbo);
|
||||
glFramebufferTexture2D(GL_FRAMEBUFFER, GL_DEPTH_ATTACHMENT,
|
||||
GL_TEXTURE_2D, depthTexture, 0);
|
||||
|
||||
// No color buffer for this FBO — depth only.
|
||||
#ifdef EMSCRIPTEN
|
||||
GLenum drawBuffers[] = { GL_NONE };
|
||||
glDrawBuffers(1, drawBuffers);
|
||||
#else
|
||||
glDrawBuffer(GL_NONE);
|
||||
glReadBuffer(GL_NONE);
|
||||
|
||||
if (glCheckFramebufferStatus(GL_FRAMEBUFFER) != GL_FRAMEBUFFER_COMPLETE) {
|
||||
std::cerr << "Error: Shadow map framebuffer is not complete!" << std::endl;
|
||||
#endif
|
||||
|
||||
GLenum status = glCheckFramebufferStatus(GL_FRAMEBUFFER);
|
||||
if (status != GL_FRAMEBUFFER_COMPLETE) {
|
||||
std::cerr << "Error: Shadow map framebuffer is not complete! Status: 0x"
|
||||
<< std::hex << status << std::endl;
|
||||
}
|
||||
|
||||
glBindFramebuffer(GL_FRAMEBUFFER, 0);
|
||||
|
||||
@@ -54,13 +54,13 @@ bool TextRenderer::init(Renderer& renderer, const std::string& ttfPath, int pixe
|
||||
zipfilename
|
||||
);
|
||||
#endif
|
||||
ZL::CheckGlError();
|
||||
ZL::CheckGlError(__FILE__, __LINE__);
|
||||
if (!loadGlyphs(ttfPath, pixelSize, zipfilename)) return false;
|
||||
ZL::CheckGlError();
|
||||
ZL::CheckGlError(__FILE__, __LINE__);
|
||||
|
||||
textMesh.data.PositionData.resize(6, Eigen::Vector3f(0, 0, 0));
|
||||
textMesh.RefreshVBO();
|
||||
ZL::CheckGlError();
|
||||
ZL::CheckGlError(__FILE__, __LINE__);
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
@@ -54,7 +54,7 @@ namespace ZL
|
||||
glTexImage2D(GL_TEXTURE_2D, 0, internalFormat,
|
||||
static_cast<GLsizei>(width), static_cast<GLsizei>(height),
|
||||
0, externalFormat, GL_UNSIGNED_BYTE, texData.data.data());
|
||||
CheckGlError();
|
||||
CheckGlError(__FILE__, __LINE__);
|
||||
|
||||
// 3. Фильтрация и Мип-мапы
|
||||
// ВНИМАНИЕ: Для шрифтов (NPOT) в WebGL glGenerateMipmap работать НЕ будет!
|
||||
@@ -67,7 +67,7 @@ namespace ZL
|
||||
}
|
||||
glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
|
||||
CheckGlError();
|
||||
CheckGlError(__FILE__, __LINE__);
|
||||
glPixelStorei(GL_UNPACK_ALIGNMENT, 4);
|
||||
}
|
||||
|
||||
@@ -91,7 +91,7 @@ namespace ZL
|
||||
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP, texID);
|
||||
|
||||
CheckGlError();
|
||||
CheckGlError(__FILE__, __LINE__);
|
||||
|
||||
|
||||
glTexParameteri(GL_TEXTURE_CUBE_MAP, GL_TEXTURE_MAG_FILTER, GL_LINEAR);
|
||||
@@ -106,7 +106,7 @@ namespace ZL
|
||||
#endif
|
||||
#endif
|
||||
|
||||
CheckGlError();
|
||||
CheckGlError(__FILE__, __LINE__);
|
||||
|
||||
for (int i = 0; i < 6; ++i)
|
||||
{
|
||||
@@ -136,7 +136,7 @@ namespace ZL
|
||||
GL_UNSIGNED_BYTE,
|
||||
texDataArray[i].data.data()
|
||||
);
|
||||
CheckGlError();
|
||||
CheckGlError(__FILE__, __LINE__);
|
||||
}
|
||||
|
||||
glBindTexture(GL_TEXTURE_CUBE_MAP, 0);
|
||||
|
||||
Reference in new issue
Block a user