Mercurial > hg > orthanc-stone
annotate Framework/OpenGL/OpenGLTexture.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 | 97926984d5d0 |
children | 6a9300ecfa13 |
rev | line source |
---|---|
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
2 * Stone of Orthanc |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
3 * Copyright (C) 2012-2016 Sebastien Jodogne, Medical Physics |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 * Department, University Hospital of Liege, Belgium |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
5 * Copyright (C) 2017-2019 Osimis S.A., Belgium |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
6 * |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
7 * This program is free software: you can redistribute it and/or |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
8 * modify it under the terms of the GNU Affero General Public License |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
9 * as published by the Free Software Foundation, either version 3 of |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
10 * the License, or (at your option) any later version. |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
11 * |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
12 * This program is distributed in the hope that it will be useful, but |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
13 * WITHOUT ANY WARRANTY; without even the implied warranty of |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
15 * Affero General Public License for more details. |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
16 * |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
17 * You should have received a copy of the GNU Affero General Public License |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
18 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
19 **/ |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
20 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
21 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
22 #include "OpenGLTexture.h" |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
23 #include "IOpenGLContext.h" |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
24 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 #include <Core/OrthancException.h> |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 namespace OrthancStone |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 { |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 namespace OpenGL |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 { |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
31 OpenGLTexture::OpenGLTexture(OpenGL::IOpenGLContext& context) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
32 : width_(0) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
33 , height_(0) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
34 , context_(context) |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 { |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
36 if (!context_.IsContextLost()) |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 { |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
38 // context is made current externally. Let's check this! |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
39 ORTHANC_CHECK_CURRENT_CONTEXT(context_); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
40 // Generate a texture object |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
41 glGenTextures(1, &texture_); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
42 if (texture_ == 0) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
43 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
44 throw Orthanc::OrthancException(Orthanc::ErrorCode_InternalError, |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
45 "Cannot create an OpenGL program"); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
46 } |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 } |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 } |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
50 OpenGLTexture::~OpenGLTexture() |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
51 { |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
52 try |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
53 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
54 if (!context_.IsContextLost()) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
55 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
56 // context is made current externally. Let's check this! |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
57 ORTHANC_CHECK_CURRENT_CONTEXT(context_); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
58 assert(texture_ != 0); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
59 ORTHANC_OPENGL_TRACE_CURRENT_CONTEXT("About to call glDeleteTextures"); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
60 glDeleteTextures(1, &texture_); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
61 } |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
62 } |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
63 catch (const Orthanc::OrthancException& e) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
64 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
65 if (e.HasDetails()) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
66 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
67 LOG(ERROR) << "OrthancException in ~OpenGLTexture: " << e.What() << " Details: " << e.GetDetails(); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
68 } |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
69 else |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
70 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
71 LOG(ERROR) << "OrthancException in ~OpenGLTexture: " << e.What(); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
72 } |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
73 } |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
74 catch (const std::exception& e) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
75 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
76 LOG(ERROR) << "std::exception in ~OpenGLTexture: " << e.what(); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
77 } |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
78 catch (...) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
79 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
80 LOG(ERROR) << "Unknown exception in ~OpenGLTexture"; |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
81 } |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
82 } |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
83 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
84 void OpenGLTexture::Load(const Orthanc::ImageAccessor& image, |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
85 bool isLinearInterpolation) |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
86 { |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
87 // context is made current externally. Let's check this! |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
88 ORTHANC_CHECK_CURRENT_CONTEXT(context_); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
89 if (!context_.IsContextLost()) |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
90 { |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
91 glPixelStorei(GL_UNPACK_ALIGNMENT, 1); // Disable byte-alignment restriction |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
92 |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
93 if (image.GetPitch() != image.GetBytesPerPixel() * image.GetWidth()) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
94 { |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
95 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
96 "Unsupported non-zero padding"); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
97 } |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
98 |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
99 // Bind it |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
100 glActiveTexture(GL_TEXTURE0); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
101 glBindTexture(GL_TEXTURE_2D, texture_); |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
102 |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
103 GLenum sourceFormat, internalFormat; |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
104 |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
105 switch (image.GetFormat()) |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
106 { |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
107 case Orthanc::PixelFormat_Grayscale8: |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
108 sourceFormat = GL_RED; |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
109 internalFormat = GL_RED; |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
110 break; |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
111 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
112 case Orthanc::PixelFormat_RGB24: |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
113 sourceFormat = GL_RGB; |
616
97926984d5d0
WebAssembly sample using Scene2D
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
579
diff
changeset
|
114 internalFormat = GL_RGB; |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
115 break; |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
116 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
117 case Orthanc::PixelFormat_RGBA32: |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
118 sourceFormat = GL_RGBA; |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
119 internalFormat = GL_RGBA; |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
120 break; |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
121 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
122 default: |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
123 throw Orthanc::OrthancException(Orthanc::ErrorCode_NotImplemented, |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
124 "No support for this format in OpenGL textures: " + |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
125 std::string(EnumerationToString(image.GetFormat()))); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
126 } |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
127 |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
128 width_ = image.GetWidth(); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
129 height_ = image.GetHeight(); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
130 |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
131 GLint interpolation = (isLinearInterpolation ? GL_LINEAR : GL_NEAREST); |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
132 |
947
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
133 // Load the texture from the image buffer |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
134 glTexImage2D(GL_TEXTURE_2D, 0, internalFormat, image.GetWidth(), image.GetHeight(), |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
135 0, sourceFormat, GL_UNSIGNED_BYTE, image.GetBuffer()); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
136 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MIN_FILTER, interpolation); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
137 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAG_FILTER, interpolation); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
138 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_S, GL_CLAMP_TO_EDGE); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
139 glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_WRAP_T, GL_CLAMP_TO_EDGE); |
1091b2adeb5a
Fixed animation frame stopping when returning false + big work on the OpenGL
Benjamin Golinvaux <bgo@osimis.io>
parents:
616
diff
changeset
|
140 } |
579
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
141 } |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
142 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
143 |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
144 void OpenGLTexture::Bind(GLint location) |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
145 { |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
146 glActiveTexture(GL_TEXTURE0); |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
147 glBindTexture(GL_TEXTURE_2D, texture_); |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
148 glUniform1i(location, 0 /* texture unit */); |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
149 } |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
150 } |
fadacfbf5538
OpenGL programs and textures
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
151 } |