source: trunk/src/gfx/debug_draw.cc @ 504

Last change on this file since 504 was 504, checked in by epyon, 9 years ago
  • temporary add_base_path for image manager
  • random - warning fix
  • debug_draw - shader upgrade
File size: 2.7 KB
RevLine 
[395]1// Copyright (C) 2014-2015 ChaosForge Ltd
[237]2// http://chaosforge.org/
3//
[395]4// This file is part of Nova libraries.
5// For conditions of distribution and use, see copying.txt file in root folder.
[237]6
7#include "nv/gfx/debug_draw.hh"
8
9#include "nv/interface/device.hh"
[469]10#include "nv/core/logging.hh"
[237]11
[346]12static const char *nv_debug_draw_vertex_shader = R"(
[504]13#version 330
14in vec3 nv_position;
15in vec3 nv_color;
16out vec3 v_color;
[346]17uniform mat4 nv_m_mvp;
18void main(void)
19{
20        gl_Position = nv_m_mvp * vec4 (nv_position, 1.0);
21        v_color     = nv_color;
22};
23)";
24static const char *nv_debug_draw_fragment_shader = R"(
[504]25#version 330
26in  vec3 v_color;
[491]27out vec4 o_frag_color;
[346]28void main(void)
29{
[491]30        o_frag_color = vec4( v_color, 1.0 );
[346]31}
32)";
[237]33
[313]34nv::debug_data::debug_data( context* a_context )
35        : m_context( a_context ), m_program(), m_va()
[237]36{
[501]37        m_program = m_context->create_program( nv_debug_draw_vertex_shader, nv_debug_draw_fragment_shader );
[469]38        m_buffer_size = 0;
[237]39}
40
41void nv::debug_data::update()
42{
[469]43        if ( !m_va.is_valid() || m_data.size() > m_buffer_size )
44        {
45                if ( m_va.is_valid() ) m_context->release( m_va );
46                m_buffer_size = nv::max( m_data.size(), 4096U, m_buffer_size );
[501]47                m_vb = m_context->create_buffer( VERTEX_BUFFER, nv::STREAM_DRAW, m_buffer_size * sizeof( debug_vtx ) );
[491]48                vertex_array_desc va_desc;
49                va_desc.add_vertex_buffers< debug_vtx >( m_vb, true );
50                m_va = m_context->create_vertex_array( va_desc );
[469]51        }
[499]52        m_context->update( m_vb, m_data.data(), 0, m_data.size()* sizeof( debug_vtx ) );
[237]53}
54
55void nv::debug_data::reset()
56{
57        m_data.clear();
58}
59
60void nv::debug_data::push_line( const vec3& a, const vec3& b, const vec3& color )
61{
62        m_data.emplace_back( a, color );
63        m_data.emplace_back( b, color );
64}
65
66void nv::debug_data::push_aabox( const vec3& a, const vec3& b, const vec3& color )
67{
68        vec3 corners[8] =
69        {
70                vec3( a.x, a.y, a.z ), vec3( b.x, a.y, a.z ), vec3( b.x, a.y, b.z ), vec3( a.x, a.y, b.z ),
71                vec3( a.x, b.y, a.z ), vec3( b.x, b.y, a.z ), vec3( b.x, b.y, b.z ), vec3( a.x, b.y, b.z ),
72        };
73
74        push_line( corners[0], corners[1], color );
75        push_line( corners[1], corners[2], color );
76        push_line( corners[2], corners[3], color );
77        push_line( corners[3], corners[0], color );
78        push_line( corners[0], corners[4], color );
79        push_line( corners[1], corners[5], color );
80        push_line( corners[2], corners[6], color );
81        push_line( corners[3], corners[7], color );
82        push_line( corners[4], corners[5], color );
83        push_line( corners[5], corners[6], color );
84        push_line( corners[6], corners[7], color );
85        push_line( corners[7], corners[4], color );
86}
87
88nv::debug_data::~debug_data()
89{
[313]90        m_context->release( m_va );
[501]91        m_context->release( m_program );
[237]92}
Note: See TracBrowser for help on using the repository browser.