Re: Windows GTK+ 2.24.10: Cairo contexts not rendering to surface



N.B. I have removed the original Stack Overflow question, and created a new question with this new information:

http://stackoverflow.com/questions/41986105/idirect3d9createdevice-prevents-gtk-2-cairo-rendering

On 1 February 2017 at 17:10, Jeffrey Sheen <jeffrey sheen00 alumni imperial ac uk> wrote:
After trying different VS 2015 Solution configurations (and abundant breakpointing), I have established that it is not the .EXE->.LIB->Cairo API call structure that is breaking Cairo surface rendering in my project.

The black test square can be rendered before, but not directly after, this D3D9 API call:

Direct3DCreate9(D3D_SDK_VERSION)->CreateDevice( D3DADAPTER_DEFAULT, D3DDEVTYPE_HAL, WindowHandle, D3DCREATE_HARDWARE_VERTEXPROCESSING, &PresentParameters, &PDevice);

N.B. The object parameters are as follows:

WindowHandle 0x001b07f8 {unused=13111204 } HWND__ *
unused 13111204 int

PresentParameters {BackBufferWidth=0 BackBufferHeight=0 BackBufferFormat=D3DFMT_UNKNOWN (0) ...} _D3DPRESENT_PARAMETERS_
BackBufferWidth 0 unsigned int
BackBufferHeight 0 unsigned int
BackBufferFormat D3DFMT_UNKNOWN (0) _D3DFORMAT
BackBufferCount 1 unsigned int
MultiSampleType D3DMULTISAMPLE_NONE (0) _D3DMULTISAMPLE_TYPE
MultiSampleQuality 0 unsigned long
SwapEffect D3DSWAPEFFECT_DISCARD (1) _D3DSWAPEFFECT
+ hDeviceWindow 0x001b07f8 {unused=13111204 } HWND__ *
Windowed 1 int
EnableAutoDepthStencil 0 int
AutoDepthStencilFormat D3DFMT_UNKNOWN (0) _D3DFORMAT
Flags 1 unsigned long
FullScreen_RefreshRateInHz 0 unsigned int
PresentationInterval 0 unsigned int

PDevice 0x00000000 <NULL> IDirect3DDevice9 *
+ IUnknown <struct at NULL> IUnknown

As a reminder, the code for rendering the black test square is as below, and the status of each Cairo API call returns "no error has occurred":

cairo_surface_t *surface;
cairo_t *cr;
cairo_status_t status;

surface = cairo_image_surface_create(CAIRO_FORMAT_ARGB32, 390, 60);
status = cairo_surface_status(surface);

cr = cairo_create(surface);
status = cairo_status(cr);

cairo_set_source_rgba(cr, 0, 0, 0, 1);
status = cairo_status(cr);

cairo_rectangle(cr, 175, 10, 40, 40);
status = cairo_status(cr);

cairo_fill(cr);
status = cairo_status(cr);

cairo_surface_flush(surface);
status = cairo_surface_write_to_png(surface, "f:\\cairo_test_pos_lib_member_function.png");

cairo_destroy(cr);
cairo_surface_destroy(surface);

Can anyone suggest how to proceed from here?

Cheers,

Jeff.

On 27 January 2017 at 11:07, Jeffrey Sheen <jeffrey.sheen00@alumni.imperial.ac.uk> wrote:
Thanks for taking a look Eric.

The status value after all of the Cairo API calls are all "no error has occurred", in both the EXE implementation and LIB implementation, so no information there.

I noticed this output during the execution of the EXE:

'Loaded 'F:\filestore\development\gtk+\gtk+-bundle_2.24.10-20120208_win32\bin\libcairo-2.dll'. Module was built without symbols.
'Loaded 'F:\filestore\development\gtk+\gtk+-bundle_2.24.10-20120208_win32\bin\libfontconfig-1.dll'. Module was built without symbols.
'Loaded 'F:\filestore\development\gtk+\gtk+-bundle_2.24.10-20120208_win32\bin\libexpat-1.dll'. Module was built without symbols.
'Loaded 'F:\filestore\development\gtk+\gtk+-bundle_2.24.10-20120208_win32\bin\freetype6.dll'. Module was built without symbols.
'Loaded 'F:\filestore\development\gtk+\gtk+-bundle_2.24.10-20120208_win32\bin\libpng14-14.dll'. Module was built without symbols.
'Loaded 'F:\filestore\development\gtk+\gtk+-bundle_2.24.10-20120208_win32\bin\zlib1.dll'. Module was built without symbols.

Only the GTK+ DLL files are reported as missing symbols, where others have theirs loaded. Is it possible that the dynamic linkage is broken for API calls made from the static LIB because of this?

On 26 January 2017 at 18:47, <cecashon aol com> wrote:

Hi Jeffrey,

I am probably not much help here. Your code works on Ubuntu16.04 and GTK2.24.30. It does seem strange that there isn't an error popping up someplace. Have you tried getting the status of that function to see if it returns an error?

    cairo_status_t status;
    status=cairo_surface_write_to_png(surface, test_dir);
    g_print("%s\n", cairo_status_to_string(status));

Maybe it might offer a clue to what is going on.

Eric








[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]