mirror of
https://github.com/MaSzyna-EU07/maszyna.git
synced 2026-07-19 05:29:17 +02:00
merge (still broken)
This commit is contained in:
97
renderer.cpp
97
renderer.cpp
@@ -541,30 +541,39 @@ opengl_renderer::Render( TGroundNode *Node ) {
|
||||
}
|
||||
|
||||
case GL_LINES: {
|
||||
if( ( Node->m_geometry == NULL )
|
||||
if( ( Node->Piece->geometry == NULL )
|
||||
|| ( Node->fLineThickness > 0.0 ) ) {
|
||||
return false;
|
||||
}
|
||||
// setup
|
||||
// w zaleznosci od koloru swiatla
|
||||
auto const distance = std::sqrt( distancesquared );
|
||||
auto const linealpha =
|
||||
10.0 * Node->fLineThickness
|
||||
/ std::max(
|
||||
0.5 * Node->m_radius + 1.0,
|
||||
distance - ( 0.5 * Node->m_radius ) );
|
||||
::glColor4fv(
|
||||
glm::value_ptr(
|
||||
glm::vec4(
|
||||
Node->Diffuse * Global::daylight.ambient,
|
||||
std::min(
|
||||
1.0,
|
||||
1000.0 * Node->fLineThickness / ( distancesquared + 1.0 ) ) ) ) );
|
||||
Node->Diffuse * Global::daylight.ambient, // w zaleznosci od koloru swiatla
|
||||
1.0 ) ) ); // if the thickness is defined negative, lines are always drawn opaque
|
||||
auto const linewidth = clamp( 0.5 * linealpha + Node->fLineThickness * Node->m_radius / 1000.0, 1.0, 32.0 );
|
||||
if( linewidth > 1.0 ) {
|
||||
::glLineWidth( static_cast<float>( linewidth ) );
|
||||
}
|
||||
|
||||
GfxRenderer.Bind( 0 );
|
||||
|
||||
// render
|
||||
m_geometry.draw( Node->m_geometry );
|
||||
m_geometry.draw( Node->Piece->geometry );
|
||||
|
||||
if (linewidth > 1.0) { ::glLineWidth(1.0f); }
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
case GL_TRIANGLES: {
|
||||
if( ( Node->m_geometry == NULL )
|
||||
if( ( Node->Piece->geometry == NULL )
|
||||
|| ( ( Node->iFlags & 0x10 ) == 0 ) ) {
|
||||
return false;
|
||||
}
|
||||
@@ -574,7 +583,7 @@ opengl_renderer::Render( TGroundNode *Node ) {
|
||||
Bind( Node->TextureID );
|
||||
|
||||
// render
|
||||
m_geometry.draw( Node->m_geometry );
|
||||
m_geometry.draw( Node->Piece->geometry );
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -755,7 +764,7 @@ opengl_renderer::Render( TSubModel *Submodel, glm::mat4 m) {
|
||||
// ...luminance
|
||||
if( Global::fLuminance < Submodel->fLight ) {
|
||||
// zeby swiecilo na kolorowo
|
||||
::glMaterialfv( GL_FRONT, GL_EMISSION, glm::value_ptr(Submodel->f4Diffuse) );
|
||||
World.shader.set_material(glm::vec3(Submodel->f4Diffuse) * Submodel->f4Emision.a);
|
||||
}
|
||||
|
||||
// main draw call
|
||||
@@ -775,7 +784,7 @@ opengl_renderer::Render( TSubModel *Submodel, glm::mat4 m) {
|
||||
|
||||
if( Submodel->fCosViewAngle > Submodel->fCosFalloffAngle ) // kąt większy niż maksymalny stożek swiatła
|
||||
{
|
||||
float lightlevel = 1.0f;
|
||||
float lightlevel = 1.0f; // TODO, TBD: parameter to control light strength
|
||||
// view angle attenuation
|
||||
float const anglefactor = ( Submodel->fCosViewAngle - Submodel->fCosFalloffAngle ) / ( 1.0f - Submodel->fCosFalloffAngle );
|
||||
// distance attenuation. NOTE: since it's fixed pipeline with built-in gamma correction we're using linear attenuation
|
||||
@@ -967,7 +976,7 @@ opengl_renderer::Render_Alpha( TGroundNode *Node ) {
|
||||
}
|
||||
float const linealpha = static_cast<float>(
|
||||
std::min(
|
||||
1.2,
|
||||
1.25,
|
||||
5000 * Node->hvTraction->WireThickness / ( distancesquared + 1.0 ) ) ); // zbyt grube nie są dobre
|
||||
::glLineWidth( linealpha );
|
||||
// McZapkie-261102: kolor zalezy od materialu i zasniedzenia
|
||||
@@ -996,17 +1005,23 @@ opengl_renderer::Render_Alpha( TGroundNode *Node ) {
|
||||
}
|
||||
|
||||
case GL_LINES: {
|
||||
if( ( Node->m_geometry == NULL )
|
||||
if( ( Node->Piece->geometry == NULL )
|
||||
|| ( Node->fLineThickness < 0.0 ) ) {
|
||||
return false;
|
||||
}
|
||||
// setup
|
||||
auto const linewidth = clamp( 100.0 * Node->fLineThickness / ( distancesquared + 1.0 ), 1.0, 10.0 );
|
||||
auto const distance = std::sqrt( distancesquared );
|
||||
auto const linealpha =
|
||||
10.0 * Node->fLineThickness
|
||||
/ std::max(
|
||||
0.5 * Node->m_radius + 1.0,
|
||||
distance - ( 0.5 * Node->m_radius ) );
|
||||
::glColor4fv(
|
||||
glm::value_ptr(
|
||||
glm::vec4(
|
||||
Node->Diffuse * Global::daylight.ambient, // w zaleznosci od koloru swiatla
|
||||
std::min( 1.0, linewidth ) ) ) );
|
||||
std::min( 1.0, linealpha ) ) ) );
|
||||
auto const linewidth = clamp( 0.5 * linealpha + Node->fLineThickness * Node->m_radius / 1000.0, 1.0, 32.0 );
|
||||
if( linewidth > 1.0 ) {
|
||||
::glLineWidth( static_cast<float>(linewidth) );
|
||||
}
|
||||
@@ -1014,18 +1029,20 @@ opengl_renderer::Render_Alpha( TGroundNode *Node ) {
|
||||
GfxRenderer.Bind( 0 );
|
||||
|
||||
// render
|
||||
m_geometry.draw( Node->m_geometry );
|
||||
m_geometry.draw( Node->Piece->geometry );
|
||||
|
||||
// post-render cleanup
|
||||
if( linewidth > 1.0 ) {
|
||||
::glLineWidth( 1.0f );
|
||||
}
|
||||
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
case GL_TRIANGLES: {
|
||||
if( ( Node->m_geometry == NULL )
|
||||
if( ( Node->Piece->geometry == NULL )
|
||||
|| ( ( Node->iFlags & 0x20 ) == 0 ) ) {
|
||||
return false;
|
||||
}
|
||||
@@ -1035,7 +1052,7 @@ opengl_renderer::Render_Alpha( TGroundNode *Node ) {
|
||||
Bind( Node->TextureID );
|
||||
|
||||
// render
|
||||
m_geometry.draw( Node->m_geometry );
|
||||
m_geometry.draw( Node->Piece->geometry );
|
||||
|
||||
return true;
|
||||
}
|
||||
@@ -1175,27 +1192,30 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel, glm::mat4 m) {
|
||||
World.shader.set_mv(mm);
|
||||
}
|
||||
|
||||
if (Submodel->eType < TP_ROTATOR) {
|
||||
// renderowanie obiektów OpenGL
|
||||
if (Submodel->iAlpha & Submodel->iFlags & 0x2F) // rysuj gdy element przezroczysty
|
||||
{
|
||||
// textures...
|
||||
if (Submodel->TextureID < 0) { // zmienialne skóry
|
||||
Bind(Submodel->ReplacableSkinId[-Submodel->TextureID]);
|
||||
}
|
||||
else {
|
||||
// również 0
|
||||
Bind(Submodel->TextureID);
|
||||
}
|
||||
::glColor3fv(glm::value_ptr(Submodel->f4Diffuse)); // McZapkie-240702: zamiast ub
|
||||
// ...luminance
|
||||
if (Global::fLuminance < Submodel->fLight) {
|
||||
// zeby swiecilo na kolorowo
|
||||
::glMaterialfv(GL_FRONT, GL_EMISSION, glm::value_ptr(Submodel->f4Diffuse));
|
||||
}
|
||||
if( Submodel->eType < TP_ROTATOR ) {
|
||||
// renderowanie obiektów OpenGL
|
||||
if( Submodel->iAlpha & Submodel->iFlags & 0x2F ) // rysuj gdy element przezroczysty
|
||||
{
|
||||
// textures...
|
||||
if( Submodel->TextureID < 0 ) { // zmienialne skóry
|
||||
Bind( Submodel->ReplacableSkinId[ -Submodel->TextureID ] );
|
||||
}
|
||||
else {
|
||||
// również 0
|
||||
Bind( Submodel->TextureID );
|
||||
}
|
||||
::glColor3fv( glm::value_ptr(Submodel->f4Diffuse) ); // McZapkie-240702: zamiast ub
|
||||
// ...luminance
|
||||
if( Global::fLuminance < Submodel->fLight ) {
|
||||
// zeby swiecilo na kolorowo
|
||||
World.shader.set_material(glm::vec3(Submodel->f4Diffuse) * Submodel->f4Emision.a);
|
||||
}
|
||||
|
||||
// main draw call
|
||||
m_geometry.draw(Submodel->m_geometry);
|
||||
|
||||
if (Global::fLuminance < Submodel->fLight)
|
||||
World.shader.set_material(glm::vec3(0.0f));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1288,7 +1308,7 @@ opengl_renderer::Update ( double const Deltatime ) {
|
||||
else if( framerate > 60.0 ) { targetsegments = 225; targetfactor = 1.5f; }
|
||||
else if( framerate > 30.0 ) { targetsegments = 90; targetfactor = Global::ScreenHeight / 768.0f; }
|
||||
else { targetsegments = 9; targetfactor = Global::ScreenHeight / 768.0f * 0.75f; }
|
||||
|
||||
/*
|
||||
if( targetsegments > Global::iSegmentsRendered ) {
|
||||
|
||||
Global::iSegmentsRendered = std::min( targetsegments, Global::iSegmentsRendered + 5 );
|
||||
@@ -1297,6 +1317,7 @@ opengl_renderer::Update ( double const Deltatime ) {
|
||||
|
||||
Global::iSegmentsRendered = std::max( targetsegments, Global::iSegmentsRendered - 5 );
|
||||
}
|
||||
*/
|
||||
if( targetfactor > Global::fDistanceFactor ) {
|
||||
|
||||
Global::fDistanceFactor = std::min( targetfactor, Global::fDistanceFactor + 0.05f );
|
||||
@@ -1320,6 +1341,8 @@ opengl_renderer::Update ( double const Deltatime ) {
|
||||
}
|
||||
|
||||
// TODO: add garbage collection and other less frequent works here
|
||||
m_geometry.update();
|
||||
|
||||
if( true == DebugModeFlag ) {
|
||||
m_debuginfo = m_textures.info();
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user