Activate(
intinitialWidth,
intinitialHeight,
boolinitialInterlaced);
123 boolGetValues(wxString *outputFilename,
int*width,
int*height,
bool*interlaced);
130 voidOnButton(wxCommandEvent& event);
131 voidOnChangeSize(wxCommandEvent& event);
132 voidOnCheckbox(wxCommandEvent& event);
133 voidOnCloseWindow(wxCloseEvent& event);
135DECLARE_EVENT_TABLE()
138 #define DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(var, id, type) \ 140 var = wxDynamicCast(FindWindow(id), type); \ 142 ERRORMSG("Can't find window with id "<< id); \
146 #define DECLARE_AND_FIND_WINDOW_RETURN_RESULT_ON_ERR(var, id, type, errResult) \ 148 var = wxDynamicCast(FindWindow(id), type); \ 150 ERRORMSG("Can't find window with id "<< id); \
156 #define GET_AND_IS_VALID_SIZE(textctrl, var) \ 157 (textctrl->GetValue().ToDouble(&var) && var >= 1 && fmod(var, 1.0) == 0.0 && var <= kMax_Int) 169wxDialog(parent, -1, "Export Options", wxPoint(50, 50), wxDefaultSize, wxDEFAULT_DIALOG_STYLE),
170dontProcessChange(
false)
173wxPanel *panel =
newwxPanel(
this, -1);
177topSizer->Fit(panel);
178SetClientSize(topSizer->GetMinSize());
183 switch(event.GetId()) {
186wxString filename = wxFileSelector(
187 "Choose a filename for output",
GetUserDir().c_str(),
"",
188 ".png",
"All Files|*.*|PNG files (*.png)|*.png",
189wxFD_SAVE | wxFD_OVERWRITE_PROMPT);
190 if(filename.size() > 0) tName->SetValue(filename);
220tWidth->Refresh(
true);
221tHeight->Refresh(
true);
225tWidth->SetBackgroundColour(*wxRED);
228tWidth->SetBackgroundColour(*wxWHITE);
230tHeight->SetBackgroundColour(*wxRED);
233tHeight->SetBackgroundColour(*wxWHITE);
237 if(cAspect->GetValue()) {
241num.Printf(
"%i", (
int) h);
242tHeight->SetValue(num);
245num.Printf(
"%i", (
int) w);
246tWidth->SetValue(num);
253 if(cInterlace->IsEnabled()) {
254cInterlace->Enable(
false);
255cInterlace->SetValue(
false);
258 if(!cInterlace->IsEnabled()) {
259cInterlace->Enable(
true);
260cInterlace->SetValue(
true);
270 if(cAspect->GetValue()) {
279num.Printf(
"%i", (
int) h);
280tHeight->SetValue(num);
301num.Printf(
"%i", initialWidth);
302tWidth->SetValue(num);
303num.Printf(
"%i", initialHeight);
304tHeight->SetValue(num);
306cAspect->SetValue(
true);
310cInterlace->Enable(
false);
311cInterlace->SetValue(
false);
313cInterlace->SetValue(initialInterlaced);
316wxCommandEvent browse(wxEVT_COMMAND_BUTTON_CLICKED,
ID_B_BROWSE);
318 if(tName->GetValue().size() == 0)
return false;
321 return(ShowModal() == wxOK);
331*outputFilename = tName->GetValue();
337*interlaced = (cInterlace->IsEnabled() && cInterlace->GetValue());
345 bool ok= dialog.
Activate(*width, *height, *interlaced);
346 if(
ok) dialog.
GetValues(outputFilename, width, height, interlaced);
357 static boolgotAnXError;
358 intX_error_handler(Display *dpy, XErrorEvent *
error)
374 case1: start = 0; end = 1;
break;
375 case2: start = 1; end = 2;
break;
376 case3: start = 2; end = 3;
break;
377 case4: start = 3; end = 5;
break;
378 case5: start = 5; end = 7;
break;
379 case6: start = 7; end = 11;
break;
380 case7: start = 11; end = 15;
break;
384((start / 15) + (((
double)
row) / (-
nRows)) * ((end - start) / 15)));
395 const string& outputFilename,
402 #if !defined(__WXMSW__) && !defined(__WXGTK__) && !defined(__WXMAC__) 403 ERRORMSG(
"PNG export not (yet) implemented on this platform");
406 if(!glCanvas || !glCanvas->
renderer) {
407 ERRORMSG(
"ExportPNG() - bad glCanvas parameter");
415 #ifndef CN3D_PNG_OSMESA 416 ERRORMSG(
"cn3d_png_nowin must be compiled with CN3D_PNG_OSMESA");
419 #if !defined(OSMESA_MAJOR_VERSION) || !defined(OSMESA_MINOR_VERSION) || !defined(OSMESA_RGB) 420 ERRORMSG(
"Non-windowed rendering currently requires Mesa");
423 if(glCanvas || !renderer) {
424 ERRORMSG(
"ExportPNG() - bad glCanvas/renderer parameters");
429 boolsuccess =
false, shareDisplayLists =
true;
430 intbufferHeight, bytesPerPixel = 3, nChunks = 1;
433 unsigned char*rowStorage =
NULL;
434png_structp png_ptr =
NULL;
435png_infop info_ptr =
NULL;
438outputWidth = glCanvas->GetClientSize().GetWidth();
439outputHeight = glCanvas->GetClientSize().GetHeight();
443filename = outputFilename.c_str();
447 INFOMSG(
"saving PNG file '"<< filename.c_str() <<
"'");
457bufferHeight = outputHeight;
460nChunks = outputHeight / bufferHeight;
461 if(outputHeight % bufferHeight != 0) ++nChunks;
465 INFOMSG(
"output size: "<< outputWidth <<
'x'<< outputHeight <<
", interlaced="<< (interlaced ?
"yes":
"no"));
470message.Printf(
"Writing PNG file %s (%ix%i)",
471(wxString(wxFileNameFromPath(filename.c_str()))).c_str(),
472outputWidth, outputHeight);
477 out= fopen(filename.c_str(),
"wb");
478 if(!
out)
throw "can't open file for writing";
481 #ifdef CN3D_PNG_OSMESA 482OSMesaContext mesaContext = 0;
483 unsigned char*mesaBuffer =
NULL;
485 if((mesaContext = OSMesaCreateContext(OSMESA_RGBA,
NULL)) == 0)
486 throw "OSMesaCreateContext failed";
487mesaBuffer =
new unsigned char[outputWidth * bufferHeight * 4 *
sizeof(GLubyte)];
488 if(OSMesaMakeCurrent(mesaContext, mesaBuffer, GL_UNSIGNED_BYTE, outputWidth, bufferHeight) != GL_TRUE)
489 throw "OSMesaMakeCurrent failed";
490shareDisplayLists =
false;
491 TRACEMSG(
"Created OSMesa context and made it current");
497 #if defined(__WXMSW__) 498HDC hdc =
NULL, current_hdc =
NULL;
499HGLRC hglrc =
NULL, current_hglrc =
NULL;
500HGDIOBJ current_hgdiobj =
NULL;
502PIXELFORMATDESCRIPTOR pfd;
505current_hglrc = wglGetCurrentContext();
506current_hdc = wglGetCurrentDC();
509hbm = CreateCompatibleBitmap(current_hdc, outputWidth, bufferHeight);
510 if(!hbm)
throw "failed to create rendering BITMAP";
511hdc = CreateCompatibleDC(current_hdc);
512 if(!hdc)
throw "CreateCompatibleDC failed";
513current_hgdiobj = SelectObject(hdc, hbm);
514 if(!current_hgdiobj)
throw "SelectObject failed";
516memset(&pfd, 0,
sizeof(PIXELFORMATDESCRIPTOR));
517pfd.nSize =
sizeof(PIXELFORMATDESCRIPTOR);
519pfd.dwFlags = PFD_DRAW_TO_BITMAP | PFD_SUPPORT_OPENGL;
520pfd.iPixelType = PFD_TYPE_RGBA;
521pfd.cColorBits = GetDeviceCaps(current_hdc, BITSPIXEL);
522pfd.iLayerType = PFD_MAIN_PLANE;
523nPixelFormat = ChoosePixelFormat(hdc, &pfd);
525 ERRORMSG(
"ChoosePixelFormat failed");
526 throwGetLastError();
528 if(!SetPixelFormat(hdc, nPixelFormat, &pfd)) {
529 ERRORMSG(
"SetPixelFormat failed");
530 throwGetLastError();
532hglrc = wglCreateContext(hdc);
534 ERRORMSG(
"wglCreateContext failed");
535 throwGetLastError();
538 if(!wglShareLists(current_hglrc, hglrc)) {
539 WARNINGMSG(
"wglShareLists failed: "<< GetLastError());
540shareDisplayLists =
false;
542 if(!wglMakeCurrent(hdc, hglrc)) {
543 ERRORMSG(
"wglMakeCurrent failed");
544 throwGetLastError();
547 #elif defined(__WXGTK__) 549 intnAttribs, attribs[20];
550XVisualInfo *visinfo =
NULL;
551 boollocalVI =
false;
553GLXContext currentCtx =
NULL, glCtx =
NULL;
554GLXPixmap glxPixmap = 0;
555GLXDrawable currentXdrw = 0;
556Display *display =
NULL;
557 int(*currentXErrHandler)(Display *, XErrorEvent *) =
NULL;
559currentCtx = glXGetCurrentContext();
560currentXdrw = glXGetCurrentDrawable();
561display = (Display *) wxGetDisplay();
563currentXErrHandler = XSetErrorHandler(X_error_handler);
564gotAnXError =
false;
568attribs[nAttribs++] = GLX_USE_GL;
569attribs[nAttribs++] = GLX_RGBA;
570attribs[nAttribs++] = GLX_RED_SIZE;
571glGetIntegerv(GL_RED_BITS, &glSize);
572attribs[nAttribs++] = glSize;
573attribs[nAttribs++] = GLX_GREEN_SIZE;
574attribs[nAttribs++] = glSize;
575attribs[nAttribs++] = GLX_BLUE_SIZE;
576attribs[nAttribs++] = glSize;
577attribs[nAttribs++] = GLX_DEPTH_SIZE;
578glGetIntegerv(GL_DEPTH_BITS, &glSize);
579attribs[nAttribs++] = glSize;
580attribs[nAttribs++] = None;
581visinfo = glXChooseVisual(display, DefaultScreen(display), attribs);
587 #if wxCHECK_VERSION(2,9,0) 588visinfo = (XVisualInfo *) glCanvas->GetXVisualInfo();
590visinfo = (XVisualInfo *) (glCanvas->m_vi);
594xPixmap = XCreatePixmap(display,
595RootWindow(display, DefaultScreen(display)),
596outputWidth, bufferHeight, visinfo->depth);
597 if(!xPixmap)
throw "failed to create Pixmap";
598glxPixmap = glXCreateGLXPixmap(display, visinfo, xPixmap);
599 if(!glxPixmap)
throw "failed to create GLXPixmap";
600 if(gotAnXError)
throw "Got an X error creating GLXPixmap";
608shareDisplayLists =
false;
611glCtx = glXCreateContext(display, visinfo,
NULL,
False);
612 if(!glCtx || !glXMakeCurrent(display, glxPixmap, glCtx))
613 throw "failed to make GLXPixmap rendering context without shared display lists";
615 if(gotAnXError)
throw "Got an X error setting GLX context";
617 #elif defined(__WXMAC__) 618 unsigned char*base =
NULL;
619GLint attrib[20], glSize;
621AGLPixelFormat fmt =
NULL;
622AGLContext
ctx=
NULL, currentCtx;
624currentCtx = aglGetCurrentContext();
629base =
new unsigned char[outputWidth * bufferHeight * bytesPerPixel];
630 if(!base)
throw "failed to allocate image buffer";
633attrib[na++] = AGL_OFFSCREEN;
634attrib[na++] = AGL_RGBA;
635glGetIntegerv(GL_RED_BITS, &glSize);
636attrib[na++] = AGL_RED_SIZE;
637attrib[na++] = glSize;
638attrib[na++] = AGL_GREEN_SIZE;
639attrib[na++] = glSize;
640attrib[na++] = AGL_BLUE_SIZE;
641attrib[na++] = glSize;
642glGetIntegerv(GL_DEPTH_BITS, &glSize);
643attrib[na++] = AGL_DEPTH_SIZE;
644attrib[na++] = glSize;
645attrib[na++] = AGL_NONE;
647 if((fmt=aglChoosePixelFormat(
NULL, 0, attrib)) ==
NULL)
648 throw "aglChoosePixelFormat failed";
652shareDisplayLists =
false;
654 throw "aglCreateContext without shared lists failed";
658 if(!aglSetOffScreen(
ctx, outputWidth, bufferHeight, bytesPerPixel * outputWidth, base))
659 throw "aglSetOffScreen failed";
660 if(!aglSetCurrentContext(
ctx))
661 throw "aglSetCurrentContext failed";
668 TRACEMSG(
"interlaced: "<< interlaced <<
", nChunks: "<< nChunks
669<<
", buffer height: "<< bufferHeight <<
", shared: "<< shareDisplayLists);
672rowStorage =
new unsigned char[outputWidth * bytesPerPixel];
673 if(!rowStorage)
throw "failed to allocate pixel row buffer";
677 if(!png_ptr)
throw "can't create PNG write structure";
678info_ptr = png_create_info_struct(png_ptr);
679 if(!info_ptr)
throw "can't create PNG info structure";
680 if(setjmp(png_jmpbuf(png_ptr))) {
681png_destroy_write_struct(&png_ptr, &info_ptr);
682 throw "png error encountered, jump point activated";
684png_init_io(png_ptr,
out);
691png_set_IHDR(png_ptr, info_ptr, outputWidth, outputHeight,
6928, PNG_COLOR_TYPE_RGB,
693interlaced ? PNG_INTERLACE_ADAM7 : PNG_INTERLACE_NONE,
694PNG_COMPRESSION_TYPE_DEFAULT, PNG_FILTER_TYPE_DEFAULT);
695png_write_info(png_ptr, info_ptr);
706 if(!shareDisplayLists || outputHeight != glCanvas->GetClientSize().GetHeight()) {
707glCanvas->
SetGLFontFromRegistry(((
double) outputHeight) / glCanvas->GetClientSize().GetHeight());
715glViewport(0, 0, outputWidth, outputHeight);
723glPixelStorei(GL_PACK_ALIGNMENT, 1);
734 nRows= -outputHeight;
735 if(png_set_interlace_handling(png_ptr) != 7)
throw "confused by unkown PNG interlace scheme";
736 for(pass = 1; pass <= 7; ++pass) {
737 for(
int i= outputHeight - 1;
i>= 0; --
i) {
738 r= outputHeight -
i- 1;
742((pass == 1 || pass == 2) && (
r% 8 == 0)) ||
743((pass == 3) && ((
r- 4) % 8 == 0)) ||
744((pass == 4) && (
r% 4 == 0)) ||
745((pass == 5) && ((
r- 2) % 4 == 0)) ||
746((pass == 6) && (
r% 2 == 0)) ||
747((pass == 7) && ((
r- 1) % 2 == 0))
749glReadPixels(0,
i, outputWidth, 1, GL_RGB, GL_UNSIGNED_BYTE, rowStorage);
751png_write_row(png_ptr, rowStorage);
758 intbufferRow, bufferRowStart;
759 nRows= outputHeight;
760 for(
intchunk = nChunks - 1; chunk >= 0; --chunk) {
764 TRACEMSG(
"drawing chunk #"<< (chunk + 1));
765glViewport(0, -chunk*bufferHeight, outputWidth, outputHeight);
770 if(chunk == nChunks - 1)
771bufferRowStart = outputHeight - 1 - bufferHeight * (nChunks - 1);
773bufferRowStart = bufferHeight - 1;
776 for(bufferRow = bufferRowStart; bufferRow >= 0; --bufferRow) {
777glReadPixels(0, bufferRow, outputWidth, 1, GL_RGB, GL_UNSIGNED_BYTE, rowStorage);
778png_write_row(png_ptr, rowStorage);
784png_write_end(png_ptr, info_ptr);
789 if(rowStorage)
deleterowStorage;
792png_destroy_write_struct(&png_ptr, &info_ptr);
794png_destroy_write_struct(&png_ptr,
NULL);
797 #ifdef CN3D_PNG_OSMESA 798 if(mesaBuffer)
delete[] mesaBuffer;
799OSMesaDestroyContext(mesaContext);
809 #if defined(__WXMSW__) 810 if(current_hdc && current_hglrc) wglMakeCurrent(current_hdc, current_hglrc);
811 if(hglrc) wglDeleteContext(hglrc);
812 if(hbm) DeleteObject(hbm);
813 if(hdc) DeleteDC(hdc);
815 #elif defined(__WXGTK__) 816gotAnXError =
false;
818glXMakeCurrent(display, currentXdrw, currentCtx);
819glXDestroyContext(display, glCtx);
821 if(glxPixmap) glXDestroyGLXPixmap(display, glxPixmap);
822 if(xPixmap) XFreePixmap(display, xPixmap);
823 if(localVI && visinfo) XFree(visinfo);
824 if(gotAnXError)
WARNINGMSG(
"Got an X error destroying GLXPixmap context");
825XSetErrorHandler(currentXErrHandler);
827 #elif defined(__WXMAC__) 828aglSetCurrentContext(currentCtx);
829 if(
ctx) aglDestroyContext(
ctx);
830 if(fmt) aglDestroyPixelFormat(fmt);
831 if(base)
delete[] base;
837}
catch(
const char*err) {
838 ERRORMSG(
"Error creating PNG: "<< err);
839}
catch(exception& e) {
840 ERRORMSG(
"Uncaught exception while creating PNG: "<< e.what());
846 if(outputHeight != glCanvas->GetClientSize().GetHeight()) {
849 if(shareDisplayLists)
852glCanvas->Refresh(
false);
867wxBoxSizer *item0 =
newwxBoxSizer( wxVERTICAL );
869wxStaticBox *item2 =
newwxStaticBox( parent, -1,
"Output Settings");
870wxStaticBoxSizer *item1 =
newwxStaticBoxSizer( item2, wxVERTICAL );
872wxFlexGridSizer *item3 =
newwxFlexGridSizer( 1, 0, 0, 0 );
873item3->AddGrowableCol( 1 );
875wxStaticText *item4 =
newwxStaticText( parent,
ID_TEXT,
"File name:", wxDefaultPosition, wxDefaultSize, 0 );
876item3->Add( item4, 0, wxALIGN_CENTRE|wxALL, 5 );
878item3->Add( 20, 20, 0, wxALIGN_CENTRE|wxALL, 5 );
880wxButton *item5 =
newwxButton( parent,
ID_B_BROWSE,
"Browse", wxDefaultPosition, wxDefaultSize, 0 );
881item3->Add( item5, 0, wxALIGN_CENTRE|wxLEFT|wxRIGHT|wxTOP, 5 );
883item1->Add( item3, 0, wxGROW|wxALIGN_CENTER_VERTICAL, 5 );
885wxTextCtrl *item6 =
newwxTextCtrl( parent,
ID_T_NAME,
"", wxDefaultPosition, wxDefaultSize, 0 );
886item1->Add( item6, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxBOTTOM, 5 );
888wxFlexGridSizer *item7 =
newwxFlexGridSizer( 2, 0, 0, 0 );
889item7->AddGrowableCol( 1 );
890item7->AddGrowableRow( 1 );
892wxStaticText *item8 =
newwxStaticText( parent,
ID_TEXT,
"Width:", wxDefaultPosition, wxDefaultSize, 0 );
893item7->Add( item8, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
895item7->Add( 20, 20, 0, wxALIGN_CENTRE|wxALL, 5 );
897wxStaticText *item9 =
newwxStaticText( parent,
ID_TEXT,
"Height:", wxDefaultPosition, wxDefaultSize, 0 );
898item7->Add( item9, 0, wxALIGN_CENTER_VERTICAL|wxLEFT|wxRIGHT|wxTOP, 5 );
900wxTextCtrl *item10 =
newwxTextCtrl( parent,
ID_T_WIDTH,
"", wxDefaultPosition, wxDefaultSize, 0 );
901item7->Add( item10, 0, wxALIGN_CENTRE|wxLEFT|wxRIGHT|wxBOTTOM, 5 );
903wxStaticText *item11 =
newwxStaticText( parent,
ID_TEXT,
"x", wxDefaultPosition, wxDefaultSize, 0 );
904item7->Add( item11, 0, wxALIGN_CENTRE|wxLEFT|wxRIGHT|wxBOTTOM, 5 );
906wxTextCtrl *item12 =
newwxTextCtrl( parent,
ID_T_HEIGHT,
"", wxDefaultPosition, wxDefaultSize, 0 );
907item7->Add( item12, 0, wxALIGN_CENTRE|wxLEFT|wxRIGHT|wxBOTTOM, 5 );
909item1->Add( item7, 0, wxGROW|wxALIGN_CENTER_VERTICAL|wxALL, 5 );
911wxBoxSizer *item13 =
newwxBoxSizer( wxHORIZONTAL );
913wxCheckBox *item14 =
newwxCheckBox( parent,
ID_C_ASPECT,
"Maintain original aspect ratio", wxDefaultPosition, wxDefaultSize, 0 );
914item14->SetValue(
TRUE);
915item13->Add( item14, 0, wxALIGN_CENTRE|wxALL, 5 );
917item13->Add( 20, 20, 0, wxALIGN_CENTRE|wxALL, 5 );
919wxCheckBox *item15 =
newwxCheckBox( parent,
ID_C_INTERLACE,
"Interlaced", wxDefaultPosition, wxDefaultSize, 0 );
920item15->SetValue(
TRUE);
921item13->Add( item15, 0, wxALIGN_CENTRE|wxALL, 5 );
923item1->Add( item13, 0, wxALIGN_CENTRE|wxLEFT|wxRIGHT|wxTOP, 5 );
925item0->Add( item1, 0, wxALIGN_CENTRE|wxALL, 5 );
927wxBoxSizer *item16 =
newwxBoxSizer( wxHORIZONTAL );
929wxButton *item17 =
newwxButton( parent,
ID_B_OK,
"OK", wxDefaultPosition, wxDefaultSize, 0 );
930item17->SetDefault();
931item16->Add( item17, 0, wxALIGN_CENTRE|wxALL, 5 );
933item16->Add( 20, 20, 0, wxALIGN_CENTRE|wxALL, 5 );
935wxButton *item18 =
newwxButton( parent,
ID_B_CANCEL,
"Cancel", wxDefaultPosition, wxDefaultSize, 0 );
936item16->Add( item18, 0, wxALIGN_CENTRE|wxALL, 5 );
938item0->Add( item16, 0, wxALIGN_CENTRE|wxALL, 5 );
942parent->SetAutoLayout(
TRUE);
943parent->SetSizer( item0 );
946item0->Fit( parent );
947item0->SetSizeHints( parent );
EVT_CHECKBOX(ID_CADJUSTFEATURES_CHECKBOX, CAdjustFeaturesForGaps::OnKnownUnknownSelected) EVT_CHECKBOX(ID_CADJUSTFEATURES_CHECKBOX1
OpenGLRenderer * renderer
void SetGLFontFromRegistry(double fontScale=1.0)
void SuspendRendering(bool suspend)
void PostRedrawAllStructures(void)
void RecreateQuadric(void) const
void RestoreSavedView(void)
void NewView(double eyeTranslateToAngleDegrees=0.0) const
bool HasASNViewSettings(void) const
void ComputeBestView(void)
bool Activate(int initialWidth, int initialHeight, bool initialInterlaced)
void OnCloseWindow(wxCloseEvent &event)
void OnCheckbox(wxCommandEvent &event)
void OnChangeSize(wxCommandEvent &event)
void OnButton(wxCommandEvent &event)
bool GetValues(wxString *outputFilename, int *width, int *height, bool *interlaced)
void SetValue(int value, bool doYield=true)
bool IsWindowedMode(void)
static const int MAX_BUFFER_PIXELS
wxSizer * SetupPNGOptionsDialog(wxPanel *parent, bool call_fit=TRUE, bool set_sizer=TRUE)
#define DECLARE_AND_FIND_WINDOW_RETURN_ON_ERR(var, id, type)
#define DECLARE_AND_FIND_WINDOW_RETURN_RESULT_ON_ERR(var, id, type, errResult)
const wxWindowID ButtonID
static bool GetOutputParameters(wxString *outputFilename, int *width, int *height, bool *interlaced)
#define GET_AND_IS_VALID_SIZE(textctrl, var)
bool ExportPNG(Cn3DGLCanvas *glCanvas, OpenGLRenderer *renderer, const string &outputFilename, int outputWidth, int outputHeight, bool interlaced)
static const int PROGRESS_RESOLUTION
static void write_row_callback(png_structp png_ptr, png_uint_32 row, int pass)
static ProgressMeter * progressMeter
static void writepng_error_handler(png_structp png_ptr, png_const_charp msg)
Include a standard set of the NCBI C++ Toolkit most basic headers.
std::ofstream out("events_result.xml")
main entry point for tests
static const char * str(char *buf, int n)
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_SCOPE(ns)
Define a new scope.
unsigned int
A callback function used to compare two keys in a database.
Messenger * GlobalMessenger(void)
#define TRUE
bool replacment for C indicating true.
double r(size_t dimension_, const Int4 *score_, const double *prob_, double theta_)
static SLJIT_INLINE sljit_ins msg(sljit_gpr r, sljit_s32 d, sljit_gpr x, sljit_gpr b)
#define row(bind, expected)
#define Z_BEST_COMPRESSION
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4