NAME
    cgCreateObj - create a cg object type from a shader string

SYNOPSIS
      #include <Cg/cg.h>

      CGobj cgCreateObj( CGcontext context,
                         CGenum program_type,
                         const char * source,
                         CGprofile profile,
                         const char ** args );

PARAMETERS
    context The context to which the new object will be added.

    program_type
            An enumerant describing the contents of the source string. The
            following enumerants are allowed:

            CG_SOURCE
                source contains Cg source code.

            CG_OBJECT
                source contains object code that resulted from the
                precompilation of some Cg source code.

    source  A string containing either the programs source or object code.
            See program_type for more information.

    profile The profile enumerant for the program.

    args    If args is not NULL it is assumed to be an array of
            NULL-terminated strings that will be passed directly to the
            compiler as arguments. The last value of the array must be a
            NULL.

RETURN VALUES
    Returns a CGobj handle on success.

    Returns NULL if an error occurs.

DESCRIPTION
    cgCreateObj creates a new CGobj which is a source code object similar to
    a .obj or .o in C/C++ programming where various forms of data can be
    extracted. This can be used, for example, to create user defined data
    types from a Cg source string.

EXAMPLES
     // Imagine a Cg source string that contains:

     const char src[] = 
      "typedef struct { \n"
      " float3 param1;  \n"
      " half4  param2;  \n"
      "} MyType;";

     // To create a Cg obj:

     CGcontext ctx = cgCreateContext();
     CGobj structObj = cgCreateObj(ctx, CG_SOURCE, src, CG_PROFILE_ARBVP1, NULL); 
        
     // Now we can get the CGtype:

     CGtype userDefinedMyType = cgGetNamedUserType(structObj, "MyType"); 

     // We could also iterate through all the types in the CGobj printing their
     // names like this:

     int numTypes = cgGetNumUserTypes(structObj);
     for (int i=0; i<numTypes; i++) {
        cout << cgGetTypeString(cgGetUserType(structObj, i)) << endl;
     } 

ERRORS
    CG_INVALID_CONTEXT_HANDLE_ERROR is generated if context is not a valid
    context.

    CG_INVALID_ENUMERANT_ERROR is generated if program_type is not CG_SOURCE
    or CG_OBJECT.

    CG_UNKNOWN_PROFILE_ERROR is generated if profile is not a supported
    profile.

    CG_COMPILER_ERROR is generated if compilation fails.

HISTORY
    cgCreateObj was introduced in Cg 2.0.

SEE ALSO
    cgCreateObjFromFile, cgDestroyObj

