#include "stdafx.h" #include "Utilities/Log.h" #include "Emu/Memory/Memory.h" #include "GLProgramBuffer.h" int GLProgramBuffer::SearchFp(const RSXFragmentProgram& rsx_fp, GLFragmentProgram& gl_fp) { for(u32 i=0; i(rsx_fp.addr), m_buf[i].fp_data.size()) != 0) continue; gl_fp.id = m_buf[i].fp_id; gl_fp.shader = m_buf[i].fp_shader.c_str(); return i; } return -1; } int GLProgramBuffer::SearchVp(const RSXVertexProgram& rsx_vp, GLVertexProgram& gl_vp) { for(u32 i=0; i(rsx_fp.addr), vm::get_ptr(rsx_fp.addr + rsx_fp.size)); new_buf.vp_data = rsx_vp.data; new_buf.vp_shader = gl_vp.shader; new_buf.fp_shader = gl_fp.shader; m_buf.push_back(new_buf); } void GLProgramBuffer::Clear() { for (u32 i = 0; i < m_buf.size(); ++i) { glDetachShader(m_buf[i].prog_id, m_buf[i].fp_id); glDetachShader(m_buf[i].prog_id, m_buf[i].vp_id); glDeleteShader(m_buf[i].fp_id); glDeleteShader(m_buf[i].vp_id); glDeleteProgram(m_buf[i].prog_id); m_buf[i].fp_data.clear(); m_buf[i].vp_data.clear(); m_buf[i].vp_shader.clear(); m_buf[i].fp_shader.clear(); } m_buf.clear(); }