zcGetDisplayByType failed with a error : Display Not Found

0 votes
asked Jun 26 by Ito Yoshihiro (12 points)

I'm using zSpace SDK version

I wrote the code with reference to "BasicStereoGLSample.cpp".

My code works on my PC, and most my customer's environments.

But only one of my customer's environments, the code prints "zcGetDisplayByType() : Display Not Found".

The following is a simplified version of my code and it printed the same error in the problem environment.

In the environment, zcGetRuntimeVersion returns 4.0.0 .

Please tell me what is wrong with this environment.


#define CHECK_ERROR(func, error) \
    if (error != ZC_ERROR_OK) \
    { \
        char errorString[256]; \
        zcGetErrorString(error, errorString, sizeof(errorString)); \
        printf(func); \
        printf(" : "); \
        printf(errorString); \
        printf("\n"); \

main(int argc, char* argv[])
    ZCContext                    _zSpaceContext = nullptr;
    ZCHandle                    _displayHandle = nullptr;
    ZCHandle                    _bufferHandle = nullptr;
    ZCHandle                    _viewportHandle = nullptr;
    ZCHandle                    _frustumHandle = nullptr;
    ZCHandle                    _stylusHandle = nullptr;

    int                            _runtimeVersion[3];

    char buf[4096] = {0};

    ZCError error = ZC_ERROR_OK;
    if (error == ZC_ERROR_OK) { error = zcInitialize(&_zSpaceContext); CHECK_ERROR("zcInitialize()", error); }
    if (error == ZC_ERROR_OK) { error = zcGetRuntimeVersion(_zSpaceContext, &_runtimeVersion[0], &_runtimeVersion[1], &_runtimeVersion[2]); CHECK_ERROR("zcGetRuntimeVersion()", error); }
    if (error == ZC_ERROR_OK) { error = zcCreateStereoBuffer(_zSpaceContext, ZC_RENDERER_QUAD_BUFFER_GL, 0, &_bufferHandle); CHECK_ERROR("zcCreateStereoBuffer()", error); }
    if (error == ZC_ERROR_OK) { error = zcCreateViewport(_zSpaceContext, &_viewportHandle); CHECK_ERROR("zcCreateViewport()", error); }
    if (error == ZC_ERROR_OK) { error = zcGetFrustum(_viewportHandle, &_frustumHandle); CHECK_ERROR("zcGetFrustum()", error); }
    if (error == ZC_ERROR_OK) { error = zcGetTargetByType(_zSpaceContext, ZC_TARGET_TYPE_PRIMARY, 0, &_stylusHandle); CHECK_ERROR("zcGetTargetByType()", error); }
    if (error == ZC_ERROR_OK) { error = zcGetDisplayByType(_zSpaceContext, ZC_DISPLAY_TYPE_ZSPACE, 0, &_displayHandle); CHECK_ERROR("zcGetDisplayByType()", error); }

commented Jul 5 by AlexShorey (68 points)
moved Jul 5 by AlexShorey
Hello Ito Yoshihiro,

We'd like to help you get to the bottom of this. To do so, we'll need a little more information.

This might be an issue regarding the display's EDID which is used to identify whether a display is a zSpace display.

Use the following to query the number of displays and their corresponding handles.

zcGetNumDisplays(ZCContext context, ZSInt32* numDisplays);

zcGetDisplayByIndex(ZCContext context, ZSInt32 index, ZCHandle* displayHandle);

Then, use the following to retrieve information about the displays (specifically attributes such as ZC_DISPLAY_ATTRIBUTE_MANUFACTURER_NAME, ZC_DISPLAY_ATTRIBUTE_PRODUCT_CODE, and ZC_DISPLAY_ATTRIBUTE_SERIAL_NUMBER):

zcGetDisplayAttributeStr(ZCHandle displayHandle, ZCDisplayAttribute attribute, char* buffer, ZSInt32 bufferSize);

zcGetDisplayAttributeStrSize(ZCHandle displayHandle, ZCDisplayAttribute attribute, ZSInt32* size);

Please, let us know what these are returning and we'll continue to narrow down your issue.
commented Jul 5 by AlexShorey (68 points)
One more question. Would you be able to tell us if this is a 200 model zSpace?