Пример #1
0
bool GLRenderCallCache::Init()
{
    //Return if we cannot make OpenGL calls
    if(!gliCallBacks->GetGLInternalCallState())
    {
        return false;
    }

    //Test extension support
    float glVersion = gliCallBacks->GetGLVersion();
    if(glVersion < 1.4f)
    {
        LOGERR(("GLRenderCallCache::Init - Need OpenGL 1.4 implementation to use render call cache"));
        return false;
    }


    void **loadFunc;

    //Helper define for function lookups

#define GL_FUNC_LOOKUP(string)                           \
  loadFunc  = (void**)(&i##string);                      \
  *loadFunc = gliCallBacks->GetGLFunction(#string);      \
  if(*loadFunc == NULL)                                  \
  {                                                      \
    LOGERR(("Function %s unable to be mapped",#string)); \
    return false;                                        \
  }

    //Init function pointers
    GL_FUNC_LOOKUP(glDrawRangeElements);
    GL_FUNC_LOOKUP(glMultiDrawArrays);
    GL_FUNC_LOOKUP(glMultiDrawElements);

#undef GL_FUNC_LOOKUP


#define FUNC_REGISTER(function, token)        \
  gliCallBacks->RegisterGLFunction(function); \
  gliCallBacks->SetFunctionID(function, token);

    FUNC_REGISTER("glDrawArrays",  CBI_glDrawArrays);
    FUNC_REGISTER("glDrawElements",CBI_glDrawElements);

    FUNC_REGISTER("glDrawRangeElements",   CBI_glDrawRangeElements);
    FUNC_REGISTER("glDrawRangeElementsEXT",CBI_glDrawRangeElements);

    FUNC_REGISTER("glMultiDrawArrays",   CBI_glMultiDrawArrays);
    FUNC_REGISTER("glMultiDrawArraysEXT",CBI_glMultiDrawArrays);

    FUNC_REGISTER("glMultiDrawElements",   CBI_glMultiDrawElements);
    FUNC_REGISTER("glMultiDrawElementsEXT",CBI_glMultiDrawElements);

#undef FUNC_REGISTER

    return true;
}
Пример #2
0
#include "string.h"
#include "stdlib.h"

#define MAX_FUNC_LEN 32

#define FUNC_REGISTER(name) #name

int func_example();

enum TEST_FUNCTION {
	func_example_ID,
	FUNCTION_CNT
};

char function_list[FUNCTION_CNT][MAX_FUNC_LEN] = {
	FUNC_REGISTER(func_example)
};

void Func_Call_Handler(char *func_name)
{
	int i;

	for (i = 0; i < FUNCTION_CNT; i++) {
		if (strcmp(func_name, "func_example") == 0) {
			int retval = func_example();
			serial.printf("Function name:%s\n\r", func_name);
			serial.printf("Argument:None\n\r");
			serial.printf("Return value:%d <type-int>\n\r", retval);

			return;
		}