예제 #1
0
SpectraDefaultRenderer::SpectraDefaultRenderer(
	SpectraApp& app,
	const std::shared_ptr<SpectraSharedObjects>& sh_obj,
	const std::shared_ptr<SpectraVisualisation>& doc_vis,
	wxGLCanvas* canvas
): SpectraRenderer(app, sh_obj, doc_vis, canvas)
 , doc_vis_prog(Common().BuildProgram("default_doc_vis.prog"))
 , doc_vis_projection_matrix(doc_vis_prog, "ProjectionMatrix")
 , doc_vis_camera_matrix(doc_vis_prog, "CameraMatrix")
 , doc_vis_stretch_matrix(doc_vis_prog, "StretchMatrix")
 , doc_vis_transf_matrix(doc_vis_prog, "TransfMatrix")
 , doc_vis_spectrum_tex(doc_vis_prog, "SpectrumTex")
 , doc_vis_spectrum_size(doc_vis_prog, "SpectrumSize")
 , doc_vis_samples_per_unit(doc_vis_prog, "SamplesPerUnit")
 , doc_vis_selected_time(doc_vis_prog, "SelectedTime")
 , doc_vis_selection_begin(doc_vis_prog, "SelectionBegin")
 , doc_vis_selection_end(doc_vis_prog, "SelectionEnd")
 , spectrum_plane_wrap(
	Common().SpectrumPlane(
		GLuint(DocVis().GridSamples()),
		GLuint(DocVis().SignalSpectrumSize())
	)
), spectrum_plane_vao(spectrum_plane_wrap.VAOForProgram(doc_vis_prog))
 , vis_cue_prog(Common().BuildProgram("default_vis_cue.prog"))
 , vis_cue_projection_matrix(vis_cue_prog, "ProjectionMatrix")
 , vis_cue_camera_matrix(vis_cue_prog, "CameraMatrix")
 , vis_cue_stretch_matrix(vis_cue_prog, "StretchMatrix")
 , vis_cue_transf_matrix(vis_cue_prog, "TransfMatrix")
 , vis_cue_color(vis_cue_prog, "Color")
 , vis_cue_alpha(vis_cue_prog, "Alpha")
 , ground_grid_vao(Common().GroundUnitGrid().VAOForProgram(vis_cue_prog))
 , wall_grid_vao(Common().WallUnitGrid().VAOForProgram(vis_cue_prog))
{
	CacheBgColor();
}
예제 #2
0
SpectraRenderer::SpectraRenderer(
  SpectraApp& app,
  const std::shared_ptr<SpectraSharedObjects>& sh_obj,
  const std::shared_ptr<SpectraVisualisation>& doc_vis,
  wxGLCanvas* canvas)
  : parent_app(app)
  , shared_objects(sh_obj)
  , document_vis(doc_vis) {
    assert(canvas);
    canvas->SetCurrent(DocVis().GLContext());
}
예제 #3
0
void SpectraDefaultRenderer::Render(
	SpectraDocumentView& view,
	wxGLCanvas* canvas
)
{
	assert(canvas);
	canvas->SetCurrent(DocVis().GLContext());

	oglplus::Context gl;

	gl.Viewport(view.Width(), view.Height());

	gl.ClearColor(clear_r, clear_g, clear_b, 0.0);
	gl.ClearDepth(1.0f);

	gl.Clear().ColorBuffer().DepthBuffer();

	gl.Enable(oglplus::Capability::DepthTest);

	RenderSpectrum(view);
	RenderVisualCues(view);
}
예제 #4
0
void SpectraDefaultRenderer::RenderSpectrum(SpectraDocumentView& view)
{
	doc_vis_prog.Use();
	doc_vis_projection_matrix.TrySet(view.ProjectionMatrix());
	doc_vis_camera_matrix.TrySet(view.CameraMatrix());
	doc_vis_stretch_matrix.TrySet(view.StretchMatrix());
	doc_vis_transf_matrix.TrySet(view.TransfMatrix());

	oglplus::Texture::Active(0);
	DocVis().SpectrumTex().Bind(oglplus::Texture::Target::Buffer);
	doc_vis_spectrum_tex.TrySet(0);
	doc_vis_spectrum_size.TrySet(int(DocVis().SignalSpectrumSize()));
	doc_vis_samples_per_unit.TrySet(int(DocVis().SignalSamplesPerGrid()));
	doc_vis_selected_time.TrySet(DocVis().SelectedTime());
	doc_vis_selection_begin.TrySet(DocVis().SelectionBegin());
	doc_vis_selection_end.TrySet(DocVis().SelectionEnd());


	spectrum_plane_vao.Bind();
	spectrum_plane_wrap.Draw(view.SegmentCount());
}