16
0
mirror of https://github.com/MaSzyna-EU07/maszyna.git synced 2026-07-22 12:49:18 +02:00

renderer changes, temporary revert shaders for traction because of lack of texless shader

This commit is contained in:
VB
2017-07-03 20:29:34 +02:00
parent b3c2b60b97
commit 0574b3f758
4 changed files with 28 additions and 18 deletions

View File

@@ -476,10 +476,11 @@ TTraction::wire_color() const {
} }
default: {break; } default: {break; }
} }
color *= 0.2;
// w zaleźności od koloru swiatła // w zaleźności od koloru swiatła
color.r *= Global::daylight.ambient.x; //color.r *= Global::daylight.ambient.x;
color.g *= Global::daylight.ambient.y; //color.g *= Global::daylight.ambient.y;
color.b *= Global::daylight.ambient.z; //color.b *= Global::daylight.ambient.z;
} }
else { else {
// tymczasowo pokazanie zasilanych odcinków // tymczasowo pokazanie zasilanych odcinków

View File

@@ -2273,10 +2273,10 @@ world_environment::update() {
auto const moonlightlevel = m_moon.getIntensity() * 0.5f; // scaled down by arbitrary factor, it's pretty bright otherwise auto const moonlightlevel = m_moon.getIntensity() * 0.5f; // scaled down by arbitrary factor, it's pretty bright otherwise
float keylightintensity; float keylightintensity;
float twilightfactor; float twilightfactor;
glm::vec3 keylightcolor; glm::vec3 keylightcolor(0.0f);
if( moonlightlevel > sunlightlevel ) { if( moonlightlevel > sunlightlevel ) {
WriteLog("using moon: " + std::to_string(moonlightlevel)); twilightfactor = 1.0f;
/*
// rare situations when the moon is brighter than the sun, typically at night // rare situations when the moon is brighter than the sun, typically at night
Global::SunAngle = m_moon.getAngle(); Global::SunAngle = m_moon.getAngle();
Global::daylight.direction = -1.0f * m_moon.getDirection(); Global::daylight.direction = -1.0f * m_moon.getDirection();
@@ -2284,10 +2284,9 @@ world_environment::update() {
// if the moon is up, it overrides the twilight // if the moon is up, it overrides the twilight
twilightfactor = 0.0f; twilightfactor = 0.0f;
keylightcolor = glm::vec3( 255.0f / 255.0f, 242.0f / 255.0f, 202.0f / 255.0f ); keylightcolor = glm::vec3( 255.0f / 255.0f, 242.0f / 255.0f, 202.0f / 255.0f );
*/
} }
else { else {
WriteLog("using sun: " + std::to_string(sunlightlevel));
// regular situation with sun as the key light // regular situation with sun as the key light
Global::SunAngle = m_sun.getAngle(); Global::SunAngle = m_sun.getAngle();
Global::daylight.direction = -1.0f * m_sun.getDirection(); Global::daylight.direction = -1.0f * m_sun.getDirection();
@@ -2318,10 +2317,7 @@ world_environment::update() {
// ...update light colours and intensity. // ...update light colours and intensity.
keylightcolor = keylightcolor * diffuselevel; keylightcolor = keylightcolor * diffuselevel;
if (sunlightlevel > moonlightlevel) Global::daylight.color = keylightcolor * 0.8f;
Global::daylight.color = keylightcolor * 0.8f;
else
Global::daylight.color = glm::vec3(0.0f);
// tonal impact of skydome color is inversely proportional to how high the sun is above the horizon // tonal impact of skydome color is inversely proportional to how high the sun is above the horizon
// (this is pure conjecture, aimed more to 'look right' than be accurate) // (this is pure conjecture, aimed more to 'look right' than be accurate)

View File

@@ -130,8 +130,7 @@ opengl_vbogeometrybank::create_( geometry_handle const &Geometry ) {
// kiss the existing buffer goodbye, new overall data size means we'll be making a new one // kiss the existing buffer goodbye, new overall data size means we'll be making a new one
delete_buffer(); delete_buffer();
glBindBuffer(GL_ARRAY_BUFFER, 0); glGenVertexArrays(1, &m_vao);
glGenVertexArrays(1, &m_vao); // TBD: m7todo: maybe vao should be global for all buffers?
} }
// replace() subclass details // replace() subclass details
@@ -174,6 +173,7 @@ opengl_vbogeometrybank::draw_( geometry_handle const &Geometry, unsigned int con
bind_buffer(); bind_buffer();
// NOTE: we're using static_draw since it's generally true for all we have implemented at the moment // NOTE: we're using static_draw since it's generally true for all we have implemented at the moment
// TODO: allow to specify usage hint at the object creation, and pass it here // TODO: allow to specify usage hint at the object creation, and pass it here
m_activestreams = stream::none;
::glBufferData( ::glBufferData(
GL_ARRAY_BUFFER, GL_ARRAY_BUFFER,
datasize * sizeof( basic_vertex ), datasize * sizeof( basic_vertex ),
@@ -224,16 +224,14 @@ opengl_vbogeometrybank::bind_buffer() {
glBindVertexArray(m_vao); glBindVertexArray(m_vao);
::glBindBuffer( GL_ARRAY_BUFFER, m_buffer ); ::glBindBuffer( GL_ARRAY_BUFFER, m_buffer );
m_activebuffer = m_buffer; m_activebuffer = m_buffer;
m_activestreams = stream::none;
} }
void void
opengl_vbogeometrybank::delete_buffer() { opengl_vbogeometrybank::delete_buffer() {
glDeleteVertexArrays(1, &m_vao);
if( m_buffer != NULL ) { if( m_buffer != NULL ) {
::glDeleteBuffers( 1, &m_buffer ); ::glDeleteBuffers( 1, &m_buffer );
glBindVertexArray(m_vao);
if( m_activebuffer == m_buffer ) { if( m_activebuffer == m_buffer ) {
m_activebuffer = NULL; m_activebuffer = NULL;
bind_streams( stream::none ); bind_streams( stream::none );

View File

@@ -1028,7 +1028,8 @@ opengl_renderer::Render_Alpha( TGroundNode *Node ) {
} }
auto const originoffset = Node->m_rootposition - m_camera.position(); auto const originoffset = Node->m_rootposition - m_camera.position();
active_shader->set_mv(glm::translate(OpenGLMatrices.data(GL_MODELVIEW), glm::vec3(originoffset.x, originoffset.y, originoffset.z))); glm::mat4 mm(glm::translate(OpenGLMatrices.data(GL_MODELVIEW), glm::vec3(originoffset.x, originoffset.y, originoffset.z)));
active_shader->set_mv(mm);
switch (Node->iType) switch (Node->iType)
{ {
@@ -1044,14 +1045,23 @@ opengl_renderer::Render_Alpha( TGroundNode *Node ) {
// na liniach kiepsko wygląda - robi gradient // na liniach kiepsko wygląda - robi gradient
::glDisable( GL_LINE_SMOOTH ); ::glDisable( GL_LINE_SMOOTH );
} }
gl_program::unbind();
glEnableClientState(GL_VERTEX_ARRAY);
glPushMatrix();
glLoadMatrixf(glm::value_ptr(mm));
glVertexPointer(3, GL_FLOAT, sizeof(basic_vertex), static_cast<char *>(nullptr));
float const linealpha = static_cast<float>( float const linealpha = static_cast<float>(
std::min( std::min(
1.25, 1.25,
5000 * Node->hvTraction->WireThickness / ( distancesquared + 1.0 ) ) ); // zbyt grube nie są dobre 5000 * Node->hvTraction->WireThickness / ( distancesquared + 1.0 ) ) ); // zbyt grube nie są dobre
::glLineWidth( linealpha ); ::glLineWidth( linealpha );
// McZapkie-261102: kolor zalezy od materialu i zasniedzenia // McZapkie-261102: kolor zalezy od materialu i zasniedzenia
auto const color { Node->hvTraction->wire_color() }; auto const color { Node->hvTraction->wire_color() };
::glColor4f( color.r, color.g, color.b, linealpha ); ::glColor4f( color.r, color.g, color.b, linealpha );
//::glColor4f(0.0f, 0.0f, 0.0f, linealpha);
Bind( NULL ); Bind( NULL );
@@ -1063,6 +1073,10 @@ opengl_renderer::Render_Alpha( TGroundNode *Node ) {
::glEnable( GL_LINE_SMOOTH ); ::glEnable( GL_LINE_SMOOTH );
} }
glPopMatrix();
glDisableClientState(GL_VERTEX_ARRAY);
gl_program::bind_last();
return true; return true;
} }
else { else {
@@ -1307,6 +1321,7 @@ opengl_renderer::Render_Alpha( TSubModel *Submodel, glm::mat4 m) {
glEnableClientState(GL_VERTEX_ARRAY); glEnableClientState(GL_VERTEX_ARRAY);
glVertexPointer(3, GL_FLOAT, sizeof(basic_vertex), static_cast<char *>(nullptr)); // pozycje glVertexPointer(3, GL_FLOAT, sizeof(basic_vertex), static_cast<char *>(nullptr)); // pozycje
// setup // setup
::glPushAttrib( GL_ENABLE_BIT | GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT ); ::glPushAttrib( GL_ENABLE_BIT | GL_CURRENT_BIT | GL_COLOR_BUFFER_BIT );