Files
leocad/common/lc_aboutdialog.cpp
T
Leonardo Zide a84c3d7b7e Clean up shader initialization and preserve optional rendering fallbacks
The fixed-function renderer was removed, but shader capability guards,
bitmap text paths, and legacy attribute state still implied a working
shaderless fallback. Remove that obsolete state and check shader support
once when initializing rendering resources.

Return detailed context and shader errors through lcResult and show fatal
startup errors in GUI mode. Keep lighting, conditional lines, SDF text,
view sphere, and outlines optional, with program validity checks selecting
Flat shading, skipping unavailable overlays, or retaining selection tint.
Non-rendering exports initialize only the context needed for asset loading.

Apply icon availability to every parts list without overwriting requested
sizes. Disable unavailable lighting and view-sphere preference controls,
make attribute aliases explicit, and prevent signed-byte glyph indexing.

Validation: macOS debug build, GUI and image export under forced optional
shader compile/link failures, Flat fallback image comparisons, export
initialization checks, preference preservation, and glyph byte-range checks.
2026-10-11 21:00:12 -07:00

54 lines
2.6 KiB
C++

#include "lc_global.h"
#include "lc_aboutdialog.h"
#include "ui_lc_aboutdialog.h"
#include "lc_mainwindow.h"
#include "lc_view.h"
#include "lc_glextensions.h"
#include "lc_viewwidget.h"
lcAboutDialog::lcAboutDialog(QWidget* Parent)
: QDialog(Parent), ui(new Ui::lcAboutDialog)
{
ui->setupUi(this);
#ifdef LC_CONTINUOUS_BUILD
ui->version->setText(tr("LeoCAD Continuous Build %1").arg(QString::fromLatin1(QT_STRINGIFY(LC_CONTINUOUS_BUILD))));
#else
ui->version->setText(tr("LeoCAD Version %1").arg(QString::fromLatin1(LC_VERSION_TEXT)));
#endif
lcViewWidget* Widget = gMainWindow->GetActiveView()->GetWidget();
QOpenGLContext* Context = Widget->context();
QOpenGLFunctions* Functions = Context->functions();
QSurfaceFormat Format = Context->format();
int ColorDepth = Format.redBufferSize() + Format.greenBufferSize() + Format.blueBufferSize() + Format.alphaBufferSize();
const QString QtVersionFormat = tr("Qt Version %1 (compiled with %2)\n\n");
const QString QtVersion = QtVersionFormat.arg(qVersion(), QT_VERSION_STR);
const QString VersionFormat = tr("OpenGL Version %1 (GLSL %2)\n%3 - %4\n\n");
const QString GLVersion(reinterpret_cast<const char*>(Functions->glGetString(GL_VERSION)));
const QString ShaderVersion(reinterpret_cast<const char*>(Functions->glGetString(GL_SHADING_LANGUAGE_VERSION)));
const QString Renderer(reinterpret_cast<const char*>(Functions->glGetString(GL_RENDERER)));
const QString Vendor(reinterpret_cast<const char*>(Functions->glGetString(GL_VENDOR)));
const QString Version = VersionFormat.arg(GLVersion, ShaderVersion, Renderer, Vendor);
const QString BuffersFormat = tr("Color Buffer: %1 bits\nDepth Buffer: %2 bits\nStencil Buffer: %3 bits\n\n");
const QString Buffers = BuffersFormat.arg(QString::number(ColorDepth), QString::number(Format.depthBufferSize()), QString::number(Format.stencilBufferSize()));
const QString ExtensionsFormat = tr("Buffers: %1\nFramebuffers: %2\nBlendFuncSeparate: %3\nAnisotropic: %4\n");
const QString VertexBuffers = gSupportsVertexBufferObject ? tr("Supported") : tr("Not supported");
const QString Framebuffers = gSupportsFramebufferObject ? tr("Supported") : tr("Not supported");
const QString BlendFuncSeparate = gSupportsBlendFuncSeparate ? tr("Supported") : tr("Not supported");
const QString Anisotropic = gSupportsAnisotropic ? tr("Supported (max %1)").arg(gMaxAnisotropy) : tr("Not supported");
const QString Extensions = ExtensionsFormat.arg(VertexBuffers, Framebuffers, BlendFuncSeparate, Anisotropic);
ui->info->setText(QtVersion + Version + Buffers + Extensions);
}
lcAboutDialog::~lcAboutDialog()
{
delete ui;
}