KiCad PCB EDA Suite
Loading...
Searching...
No Matches
buffers_debug.cpp
Go to the documentation of this file.
1/*
2 * This program source code file is part of KiCad, a free EDA CAD application.
3 *
4 * Copyright (C) 2016 Mario Luzeiro <[email protected]>
5 * Copyright The KiCad Developers, see AUTHORS.txt for contributors.
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program. If not, see <https://www.gnu.org/licenses/>.
19 */
20
25
26#include "buffers_debug.h"
27#include <wx/image.h> // Used for save an image to disk
28
34static void dbg_save_rgb_buffer( const wxString& aFileName, unsigned char *aRGBpixelBuffer,
35 unsigned int aXSize, unsigned int aYSize )
36{
37 wxImage image( aXSize, aYSize );
38 image.SetData( aRGBpixelBuffer );
39 image = image.Mirror( false );
40 image.SaveFile( aFileName + wxT( ".png" ), wxBITMAP_TYPE_PNG );
41 image.Destroy();
42}
43
44
45static void dbg_save_rgb_a_buffer( const wxString& aFileName, unsigned char* aRGBpixelBuffer,
46 unsigned char* aAlphaBuffer, unsigned int aXSize,
47 unsigned int aYSize )
48{
49 wxImage image( aXSize, aYSize );
50 image.SetData( aRGBpixelBuffer );
51 image.SetAlpha( aAlphaBuffer );
52 image = image.Mirror( false );
53 image.SaveFile( aFileName + wxT( ".png" ), wxBITMAP_TYPE_PNG );
54 image.Destroy();
55}
56
57
58void DBG_SaveBuffer( const wxString& aFileName, const unsigned char *aInBuffer,
59 unsigned int aXSize, unsigned int aYSize )
60{
61 const unsigned int wxh = aXSize * aYSize;
62
63 unsigned char *pixelbuffer = (unsigned char*) malloc( wxh * 3 );
64
65 for( unsigned int i = 0; i < wxh; ++i )
66 {
67 unsigned char v = aInBuffer[i];
68
69 // Set RGB value with all same values intensities
70 pixelbuffer[i * 3 + 0] = v;
71 pixelbuffer[i * 3 + 1] = v;
72 pixelbuffer[i * 3 + 2] = v;
73 }
74
75 dbg_save_rgb_buffer( aFileName, pixelbuffer, aXSize, aYSize );
76}
77
78
79void DBG_SaveBuffer( const wxString& aFileName, const float *aInBuffer,
80 unsigned int aXSize, unsigned int aYSize )
81{
82 const unsigned int wxh = aXSize * aYSize;
83
84 unsigned char *pixelbuffer = (unsigned char*) malloc( wxh * 3 );
85
86 for( unsigned int i = 0; i < wxh; ++i )
87 {
88 const unsigned char v = (unsigned char)glm::min( (int)(aInBuffer[i] * 255.0f), 255 );
89
90 // Set RGB value with all same values intensities
91 pixelbuffer[i * 3 + 0] = v;
92 pixelbuffer[i * 3 + 1] = v;
93 pixelbuffer[i * 3 + 2] = v;
94 }
95
96 dbg_save_rgb_buffer( aFileName, pixelbuffer, aXSize, aYSize );
97}
98
99
100void DBG_SaveBuffer( const wxString& aFileName, const SFVEC3F *aInBuffer,
101 unsigned int aXSize, unsigned int aYSize )
102{
103 const unsigned int wxh = aXSize * aYSize;
104
105 unsigned char *pixelbuffer = (unsigned char*) malloc( wxh * 3 );
106
107 for( unsigned int i = 0; i < wxh; ++i )
108 {
109 const SFVEC3F &v = aInBuffer[i];
110 const unsigned int ix3 = i * 3;
111
112 // Set RGB value with all same values intensities
113 pixelbuffer[ix3 + 0] = (unsigned char) glm::min( (int) ( v.r * 255.0f ), 255 );
114 pixelbuffer[ix3 + 1] = (unsigned char) glm::min( (int) ( v.g * 255.0f ), 255 );
115 pixelbuffer[ix3 + 2] = (unsigned char) glm::min( (int) ( v.b * 255.0f ), 255 );
116 }
117
118 dbg_save_rgb_buffer( aFileName, pixelbuffer, aXSize, aYSize );
119}
120
121
122void DBG_SaveBuffer( const wxString& aFileName, const SFVEC4F *aInBuffer,
123 unsigned int aXSize, unsigned int aYSize )
124{
125 const unsigned int wxh = aXSize * aYSize;
126
127 unsigned char *pixelbuffer = (unsigned char*) malloc( wxh * 4 );
128 unsigned char *alphabuffer = (unsigned char*) malloc( wxh );
129
130 for( unsigned int i = 0; i < wxh; ++i )
131 {
132 const SFVEC4F &v = aInBuffer[i];
133 const unsigned int ix3 = i * 3;
134
135 // Set RGB value with all same values intensities
136 pixelbuffer[ix3 + 0] = (unsigned char) glm::min( (int) ( v.r * 255.0f ), 255 );
137 pixelbuffer[ix3 + 1] = (unsigned char) glm::min( (int) ( v.g * 255.0f ), 255 );
138 pixelbuffer[ix3 + 2] = (unsigned char) glm::min( (int) ( v.b * 255.0f ), 255 );
139
140 alphabuffer[i] = (unsigned char) glm::min( (int) ( v.a * 255.0f ), 255 );
141 }
142
143 dbg_save_rgb_a_buffer( aFileName, pixelbuffer, alphabuffer, aXSize, aYSize );
144}
145
146
147void DBG_SaveNormalsBuffer( const wxString& aFileName, const SFVEC3F *aInNormalsBuffer,
148 unsigned int aXSize, unsigned int aYSize )
149{
150 const unsigned int wxh = aXSize * aYSize;
151
152 unsigned char *pixelbuffer = (unsigned char*) malloc( wxh * 3 );
153
154 for( unsigned int i = 0; i < wxh; ++i )
155 {
156 const SFVEC3F &v = aInNormalsBuffer[i];
157 const unsigned int ix3 = i * 3;
158
159 // Set RGB value with all same values intensities
160 pixelbuffer[ix3 + 0] = (unsigned char) glm::min( (int) ( ( v.r + 1.0f ) * 127.0f ), 255 );
161 pixelbuffer[ix3 + 1] = (unsigned char) glm::min( (int) ( ( v.g + 1.0f ) * 127.0f ), 255 );
162 pixelbuffer[ix3 + 2] = (unsigned char) glm::min( (int) ( ( v.b + 1.0f ) * 127.0f ), 255 );
163 }
164
165 dbg_save_rgb_buffer( aFileName, pixelbuffer, aXSize, aYSize );
166}
void DBG_SaveBuffer(const wxString &aFileName, const unsigned char *aInBuffer, unsigned int aXSize, unsigned int aYSize)
static void dbg_save_rgb_a_buffer(const wxString &aFileName, unsigned char *aRGBpixelBuffer, unsigned char *aAlphaBuffer, unsigned int aXSize, unsigned int aYSize)
static void dbg_save_rgb_buffer(const wxString &aFileName, unsigned char *aRGBpixelBuffer, unsigned int aXSize, unsigned int aYSize)
void DBG_SaveNormalsBuffer(const wxString &aFileName, const SFVEC3F *aInNormalsBuffer, unsigned int aXSize, unsigned int aYSize)
glm::vec3 SFVEC3F
Definition xv3d_types.h:40
glm::vec4 SFVEC4F
Definition xv3d_types.h:42