Mercurial > hg > orthanc-stone
comparison Framework/Scene2D/Internals/OpenGLBasicPolylineRenderer.cpp @ 947:1091b2adeb5a toa2019081001
Fixed animation frame stopping when returning false + big work on the OpenGL
objects to make them lost context-safe + debug code to forcefully tag a
context as lost + debug macros
author | Benjamin Golinvaux <bgo@osimis.io> |
---|---|
date | Sat, 10 Aug 2019 13:07:31 +0200 |
parents | 61ba4b504e9a |
children | 2d8ab34c8c91 |
comparison
equal
deleted
inserted
replaced
946:dbe3e1e47019 | 947:1091b2adeb5a |
---|---|
32 context_(context) | 32 context_(context) |
33 { | 33 { |
34 layer_.Copy(layer); | 34 layer_.Copy(layer); |
35 } | 35 } |
36 | 36 |
37 | |
38 void OpenGLBasicPolylineRenderer::Render(const AffineTransform2D& transform) | 37 void OpenGLBasicPolylineRenderer::Render(const AffineTransform2D& transform) |
39 { | 38 { |
40 AffineTransform2D t = AffineTransform2D::Combine( | 39 if (!context_.IsContextLost()) |
41 AffineTransform2D::CreateOpenGLClipspace(context_.GetCanvasWidth(), context_.GetCanvasHeight()), | 40 { |
42 transform); | 41 AffineTransform2D t = AffineTransform2D::Combine( |
42 AffineTransform2D::CreateOpenGLClipspace(context_.GetCanvasWidth(), context_.GetCanvasHeight()), | |
43 transform); | |
43 | 44 |
44 glUseProgram(0); | 45 glUseProgram(0); |
45 | 46 |
46 glBegin(GL_LINES); | 47 glBegin(GL_LINES); |
47 | 48 |
48 for (size_t i = 0; i < layer_.GetChainsCount(); i++) | 49 for (size_t i = 0; i < layer_.GetChainsCount(); i++) |
49 { | 50 { |
50 const Color& color = layer_.GetColor(i); | 51 const Color& color = layer_.GetColor(i); |
51 glColor3ub(color.GetRed(), color.GetGreen(), color.GetBlue()); | 52 glColor3ub(color.GetRed(), color.GetGreen(), color.GetBlue()); |
52 | 53 |
53 const PolylineSceneLayer::Chain& chain = layer_.GetChain(i); | 54 const PolylineSceneLayer::Chain& chain = layer_.GetChain(i); |
54 | 55 |
55 if (chain.size() > 1) | 56 if (chain.size() > 1) |
56 { | 57 { |
57 ScenePoint2D previous = chain[0].Apply(t); | 58 ScenePoint2D previous = chain[0].Apply(t); |
58 | 59 |
59 for (size_t j = 1; j < chain.size(); j++) | 60 for (size_t j = 1; j < chain.size(); j++) |
60 { | 61 { |
61 ScenePoint2D p = chain[j].Apply(t); | 62 ScenePoint2D p = chain[j].Apply(t); |
62 | 63 |
63 glVertex2f(static_cast<GLfloat>(previous.GetX()), | 64 glVertex2f(static_cast<GLfloat>(previous.GetX()), |
64 static_cast<GLfloat>(previous.GetY())); | 65 static_cast<GLfloat>(previous.GetY())); |
65 glVertex2f(static_cast<GLfloat>(p.GetX()), | 66 glVertex2f(static_cast<GLfloat>(p.GetX()), |
66 static_cast<GLfloat>(p.GetY())); | 67 static_cast<GLfloat>(p.GetY())); |
67 | 68 |
68 previous = p; | 69 previous = p; |
69 } | 70 } |
70 | 71 |
71 if (layer_.IsClosedChain(i)) | 72 if (layer_.IsClosedChain(i)) |
72 { | 73 { |
73 ScenePoint2D p = chain[0].Apply(t); | 74 ScenePoint2D p = chain[0].Apply(t); |
74 | 75 |
75 glVertex2f(static_cast<GLfloat>(previous.GetX()), | 76 glVertex2f(static_cast<GLfloat>(previous.GetX()), |
76 static_cast<GLfloat>(previous.GetY())); | 77 static_cast<GLfloat>(previous.GetY())); |
77 glVertex2f(static_cast<GLfloat>(p.GetX()), | 78 glVertex2f(static_cast<GLfloat>(p.GetX()), |
78 static_cast<GLfloat>(p.GetY())); | 79 static_cast<GLfloat>(p.GetY())); |
80 } | |
79 } | 81 } |
80 } | 82 } |
83 | |
84 glEnd(); | |
81 } | 85 } |
82 | |
83 glEnd(); | |
84 } | 86 } |
85 | 87 |
86 | 88 |
87 void OpenGLBasicPolylineRenderer::Update(const ISceneLayer& layer) | 89 void OpenGLBasicPolylineRenderer::Update(const ISceneLayer& layer) |
88 { | 90 { |