void RAS_StorageIM::TexCoord(const RAS_TexVert &tv) { int unit; if (GLEW_ARB_multitexture) { for (unit = 0; unit < *m_texco_num; unit++) { switch (m_texco[unit]) { case RAS_IRasterizer::RAS_TEXCO_ORCO: case RAS_IRasterizer::RAS_TEXCO_GLOB: glMultiTexCoord3fvARB(GL_TEXTURE0_ARB + unit, tv.getXYZ()); break; case RAS_IRasterizer::RAS_TEXCO_UV: glMultiTexCoord2fvARB(GL_TEXTURE0_ARB + unit, tv.getUV(unit)); break; case RAS_IRasterizer::RAS_TEXCO_NORM: glMultiTexCoord3fvARB(GL_TEXTURE0_ARB + unit, tv.getNormal()); break; case RAS_IRasterizer::RAS_TEXTANGENT: glMultiTexCoord4fvARB(GL_TEXTURE0_ARB + unit, tv.getTangent()); break; default: break; } } } if (GLEW_ARB_vertex_program) { for (unit = 0; unit < *m_attrib_num; unit++) { switch (m_attrib[unit]) { case RAS_IRasterizer::RAS_TEXCO_ORCO: case RAS_IRasterizer::RAS_TEXCO_GLOB: glVertexAttrib3fvARB(unit, tv.getXYZ()); break; case RAS_IRasterizer::RAS_TEXCO_UV: glVertexAttrib2fvARB(unit, tv.getUV(m_attrib_layer[unit])); break; case RAS_IRasterizer::RAS_TEXCO_NORM: glVertexAttrib3fvARB(unit, tv.getNormal()); break; case RAS_IRasterizer::RAS_TEXTANGENT: glVertexAttrib4fvARB(unit, tv.getTangent()); break; case RAS_IRasterizer::RAS_TEXCO_VCOL: glVertexAttrib4ubvARB(unit, tv.getRGBA()); break; default: break; } } } }
enum piglit_result piglit_display(void) { static const GLfloat color[4] = { 0.0, 0.5, 0.0, 0.5 }; static const GLfloat good_color[4] = { 0.0, 1.0, 0.0, 1.0 }; static const GLfloat bad_color[4] = { 1.0, 0.0, 0.0, 1.0 }; enum piglit_result result = PIGLIT_PASS; unsigned i; glClear(GL_COLOR_BUFFER_BIT); glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, 0, bad_color); glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, 1, color); glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, 2, bad_color); glProgramEnvParameter4fvARB(GL_VERTEX_PROGRAM_ARB, 3, bad_color); for (i = 0; i < ARRAY_SIZE(progs); i++) { const int x = 1 + (i * (BOX_SIZE + 1)); glBindProgramARB(GL_VERTEX_PROGRAM_ARB, progs[i]); glVertexAttrib2fvARB(1, & attrib[i * 2]); piglit_draw_rect(x, 1, BOX_SIZE, BOX_SIZE); if (!piglit_probe_pixel_rgb(x + (BOX_SIZE / 2), 1 + (BOX_SIZE / 2), good_color)) { if (! piglit_automatic) printf("shader %u failed with attributes " "%.1f, %.1f\n", i, attrib[(i * 2) + 0], attrib[(i * 2) + 1]); result = PIGLIT_FAIL; } } piglit_present_results(); return result; }
/* GL locking is done by the caller */ static inline void send_attribute(IWineD3DDeviceImpl *This, WINED3DFORMAT format, const UINT index, const void *ptr) { const struct wined3d_gl_info *gl_info = &This->adapter->gl_info; switch(format) { case WINED3DFMT_R32_FLOAT: GL_EXTCALL(glVertexAttrib1fvARB(index, ptr)); break; case WINED3DFMT_R32G32_FLOAT: GL_EXTCALL(glVertexAttrib2fvARB(index, ptr)); break; case WINED3DFMT_R32G32B32_FLOAT: GL_EXTCALL(glVertexAttrib3fvARB(index, ptr)); break; case WINED3DFMT_R32G32B32A32_FLOAT: GL_EXTCALL(glVertexAttrib4fvARB(index, ptr)); break; case WINED3DFMT_R8G8B8A8_UINT: GL_EXTCALL(glVertexAttrib4ubvARB(index, ptr)); break; case WINED3DFMT_B8G8R8A8_UNORM: if (gl_info->supported[ARB_VERTEX_ARRAY_BGRA]) { const DWORD *src = ptr; DWORD c = *src & 0xff00ff00; c |= (*src & 0xff0000) >> 16; c |= (*src & 0xff) << 16; GL_EXTCALL(glVertexAttrib4NubvARB(index, (GLubyte *)&c)); break; } /* else fallthrough */ case WINED3DFMT_R8G8B8A8_UNORM: GL_EXTCALL(glVertexAttrib4NubvARB(index, ptr)); break; case WINED3DFMT_R16G16_SINT: GL_EXTCALL(glVertexAttrib4svARB(index, ptr)); break; case WINED3DFMT_R16G16B16A16_SINT: GL_EXTCALL(glVertexAttrib4svARB(index, ptr)); break; case WINED3DFMT_R16G16_SNORM: { GLshort s[4] = {((const GLshort *)ptr)[0], ((const GLshort *)ptr)[1], 0, 1}; GL_EXTCALL(glVertexAttrib4NsvARB(index, s)); break; } case WINED3DFMT_R16G16_UNORM: { GLushort s[4] = {((const GLushort *)ptr)[0], ((const GLushort *)ptr)[1], 0, 1}; GL_EXTCALL(glVertexAttrib4NusvARB(index, s)); break; } case WINED3DFMT_R16G16B16A16_SNORM: GL_EXTCALL(glVertexAttrib4NsvARB(index, ptr)); break; case WINED3DFMT_R16G16B16A16_UNORM: GL_EXTCALL(glVertexAttrib4NusvARB(index, ptr)); break; case WINED3DFMT_R10G10B10A2_UINT: FIXME("Unsure about WINED3DDECLTYPE_UDEC3\n"); /*glVertexAttrib3usvARB(instancedData[j], (GLushort *) ptr); Does not exist */ break; case WINED3DFMT_R10G10B10A2_SNORM: FIXME("Unsure about WINED3DDECLTYPE_DEC3N\n"); /*glVertexAttrib3NusvARB(instancedData[j], (GLushort *) ptr); Does not exist */ break; case WINED3DFMT_R16G16_FLOAT: /* Are those 16 bit floats. C doesn't have a 16 bit float type. I could read the single bits and calculate a 4 * byte float according to the IEEE standard */ if (gl_info->supported[NV_HALF_FLOAT]) { /* Not supported by GL_ARB_half_float_vertex */ GL_EXTCALL(glVertexAttrib2hvNV(index, ptr)); } else { float x = float_16_to_32(((const unsigned short *)ptr) + 0); float y = float_16_to_32(((const unsigned short *)ptr) + 1); GL_EXTCALL(glVertexAttrib2fARB(index, x, y)); } break; case WINED3DFMT_R16G16B16A16_FLOAT: if (gl_info->supported[NV_HALF_FLOAT]) { /* Not supported by GL_ARB_half_float_vertex */ GL_EXTCALL(glVertexAttrib4hvNV(index, ptr)); } else { float x = float_16_to_32(((const unsigned short *)ptr) + 0); float y = float_16_to_32(((const unsigned short *)ptr) + 1); float z = float_16_to_32(((const unsigned short *)ptr) + 2); float w = float_16_to_32(((const unsigned short *)ptr) + 3); GL_EXTCALL(glVertexAttrib4fARB(index, x, y, z, w)); } break; default: ERR("Unexpected attribute format: %s\n", debug_d3dformat(format)); break; } }
JNIEXPORT void JNICALL Java_org_lwjgl_opengl_ARBVertexProgram_nglVertexAttrib2fvARB__IJ(JNIEnv *__env, jclass clazz, jint index, jlong vAddress) { glVertexAttrib2fvARBPROC glVertexAttrib2fvARB = (glVertexAttrib2fvARBPROC)tlsGetFunction(1411); intptr_t v = (intptr_t)vAddress; UNUSED_PARAM(clazz) glVertexAttrib2fvARB(index, v); }
void ccShaderARB::setAttrib2fv(int loc, float* val) { glVertexAttrib2fvARB(loc, val); }