Ejemplo n.º 1
0
Archivo: g.cpp Proyecto: soulik/luagl
	int gl_GetUniformui(State & state){
		GLuint value[4] = {0, 0, 0, 0};
		glGetUniformuiv((GLuint) state.stack->to<int>(1), (GLint) state.stack->to<int>(2), value);
		for (int i=0; i<4; i++){
			state.stack->push<int>(value[i]);
		}
		return 4;
	}
Ejemplo n.º 2
0
static void
dumpUniform(StateWriter &writer,
            GLint program,
            const AttribDesc & desc,
            const GLchar *name)
{
    if (desc.elemType == GL_NONE) {
        return;
    }

    union {
        GLfloat fvalues[4*4];
        GLdouble dvalues[4*4];
        GLint ivalues[4*4];
        GLuint uivalues[4*4];
        GLint64 i64values[4*4];
        GLuint64 ui64values[4*4];
        GLbyte data[4*4*4];
    } u;

    GLint i;

    std::string qualifiedName = resolveUniformName(name, desc.size);

    writer.beginMember(qualifiedName);
    if (desc.size > 1) {
        writer.beginArray();
    }

    for (i = 0; i < desc.size; ++i) {
        std::stringstream ss;
        ss << qualifiedName;
        if (desc.size > 1) {
            ss << '[' << i << ']';
        }
        std::string elemName = ss.str();

        GLint location = glGetUniformLocation(program, elemName.c_str());
        assert(location != -1);
        if (location == -1) {
            continue;
        }

        switch (desc.elemType) {
        case GL_FLOAT:
            glGetUniformfv(program, location, u.fvalues);
            break;
        case GL_DOUBLE:
            glGetUniformdv(program, location, u.dvalues);
            break;
        case GL_INT:
            glGetUniformiv(program, location, u.ivalues);
            break;
        case GL_UNSIGNED_INT:
            glGetUniformuiv(program, location, u.uivalues);
            break;
        case GL_INT64_ARB:
            glGetUniformi64vARB(program, location, u.i64values);
            break;
        case GL_UNSIGNED_INT64_ARB:
            glGetUniformui64vARB(program, location, u.ui64values);
            break;
        case GL_BOOL:
            glGetUniformiv(program, location, u.ivalues);
            break;
        default:
            assert(0);
            break;
        }

        dumpAttrib(writer, desc, u.data);
    }

    if (desc.size > 1) {
        writer.endArray();
    }

    writer.endMember();
}
Ejemplo n.º 3
0
static bool
test_uint(const char *version_string)
{
	GLint loc;
	bool pass = true;
	unsigned int values[4];
	unsigned int got[ARRAY_SIZE(values)];
	GLuint prog;
	static const char subtest_name[] =
		"unsigned integer scalar and vectors";
	const char *const shader_strings[] = {
		version_string,
		uint_code,
		common_body
	};

	BUILD_SHADER(version_string == NULL);

	/* Try uint
	 */
	random_uints(values, ARRAY_SIZE(values));
	loc = glGetUniformLocation(prog, "v1");
	glProgramUniform1ui(prog, loc,
			   values[0]);
	pass = piglit_check_gl_error(0) && pass;

	glGetUniformuiv(prog, loc, got);
	pass = piglit_check_gl_error(0) && pass;

	pass = check_uint_values(values, got, 1) && pass;

	random_uints(values, ARRAY_SIZE(values));
	glProgramUniform1uiv(prog, loc, 1, values);
	pass = piglit_check_gl_error(0) && pass;

	glGetUniformuiv(prog, loc, got);
	pass = piglit_check_gl_error(0) && pass;

	pass = check_uint_values(values, got, 1) && pass;

	/* Try uvec2
	 */
	random_uints(values, ARRAY_SIZE(values));
	loc = glGetUniformLocation(prog, "v2");
	glProgramUniform2ui(prog, loc,
			   values[0], values[1]);
	pass = piglit_check_gl_error(0) && pass;

	glGetUniformuiv(prog, loc, got);
	pass = piglit_check_gl_error(0) && pass;

	pass = check_uint_values(values, got, 2) && pass;

	random_uints(values, ARRAY_SIZE(values));
	glProgramUniform2uiv(prog, loc, 1, values);
	pass = piglit_check_gl_error(0) && pass;

	glGetUniformuiv(prog, loc, got);
	pass = piglit_check_gl_error(0) && pass;

	pass = check_uint_values(values, got, 2) && pass;

	/* Try uvec3
	 */
	random_uints(values, ARRAY_SIZE(values));
	loc = glGetUniformLocation(prog, "v3");
	glProgramUniform3ui(prog, loc,
			   values[0], values[1], values[2]);
	pass = piglit_check_gl_error(0) && pass;

	glGetUniformuiv(prog, loc, got);
	pass = piglit_check_gl_error(0) && pass;

	pass = check_uint_values(values, got, 3) && pass;

	random_uints(values, ARRAY_SIZE(values));
	glProgramUniform3uiv(prog, loc, 1, values);
	pass = piglit_check_gl_error(0) && pass;

	glGetUniformuiv(prog, loc, got);
	pass = piglit_check_gl_error(0) && pass;

	pass = check_uint_values(values, got, 3) && pass;

	/* Try uvec4
	 */
	random_uints(values, ARRAY_SIZE(values));
	loc = glGetUniformLocation(prog, "v4");
	glProgramUniform4ui(prog, loc,
			   values[0], values[1], values[2], values[3]);
	pass = piglit_check_gl_error(0) && pass;

	glGetUniformuiv(prog, loc, got);
	pass = piglit_check_gl_error(0) && pass;

	pass = check_uint_values(values, got, 4) && pass;

	random_uints(values, ARRAY_SIZE(values));
	glProgramUniform4uiv(prog, loc, 1, values);
	pass = piglit_check_gl_error(0) && pass;

	glGetUniformuiv(prog, loc, got);
	pass = piglit_check_gl_error(0) && pass;

	pass = check_uint_values(values, got, 4) && pass;

	piglit_report_subtest_result(pass ? PIGLIT_PASS : PIGLIT_FAIL,
				     subtest_name);

	glDeleteProgram(prog);
	return pass;
}